2009-06-04 20 views
0

In unserer Anwendung haben wir oft eine Schaltfläche, die einen Post zurück führt, Daten erhalten, in Excel/PDF konvertieren und über Response.Write oder Response.BinaryWrite zum Client streamen. Das funktioniert ganz gut, wenn wir in einem Popup sind oder nicht.ASP.NET Datei Download Problem

Wir haben gerade eine neue Funktion implementiert, die eine msg-Datei erstellt. Wir erhalten jedoch einen Fehler beim Streamen zum Client (der gleiche Code wie zuvor) - "Internet Explorer kann diese Site nicht öffnen". Wir leiten auf eine andere Seite mit einem Abfragezeichenfolgenparameter um, der angibt, für welche Datei die Bytes abgerufen und an den Client gesendet werden.

Hat das jemand schon einmal erlebt? Diese Funktion funktioniert gut auf den Dev-Computern, aber beim Staging (Server 2003, IIS 6) ist sie defekt und verursacht diesen Fehler

+0

Für große Dateien glaube ich, dass Response.TransmitFile ist besser zu verwenden als Response.Write/BinaryWrite. – Kane

+0

Ich stimme Kane zu. –

Antwort

0

Könnte es ein Rechtsproblem sein? Das excel/pdf, das Sie erstellen - wird es in eine Datei gespeichert und dann zum Download gezwungen? Wenn ja, muss die WEB-Benutzer-IIS-A/C Zugriff auf den Datei-/Ordnerbereich haben, in dem die Datei gespeichert wird.

Ich konfrontiert ein ähnliches Problem, wenn ich Excel-Dateien mit Microsoft.Excel oder Excel (COM) von ASP.Net erstellen - es würde auf meinem Dev-Rechner funktionieren (ich bin der lokale Administrator), würde aber nicht auf der Server.

Die Datei auf dem Server wird unter dem Konto des Administrators erstellt, und daher hätte das Web-User-IIS-Konto keinen Zugriff auf diese Datei und könnte daher nicht darauf zugreifen. Es gibt eine Option in IIS, um den Benutzer zu ändern, unter dessen Konten Excel über IIS ausgeführt wird.

Auch Anwendung/Octet-Stream als MIME-Typ hat immer gut für mich funktioniert, wenn Sie Dateien zum Download ausstoßen.

0

Ich habe die Dinge sehr ähnlich gemacht. Ohne Code zu sehen, ist es unmöglich, genau zu sagen, was dein Problem ist aber hier ein paar Dinge zu überprüfen:

  • setzen Sie die Response.ContentType auf den richtigen MIME-Typen für die Datei?
  • Rufen Sie Response.End() auf, sobald Sie die Bytes der Datei geschrieben haben. Wenn nicht, dann kann der HTML-Code der Seite an die Datei angehängt werden, was ihn beschädigen wird.
+0

Wir setzen den Response.ContentType auf den korrekten Wert. Das Seltsame ist, dass die Datei-Stream-Seite an einem anderen Ort verwendet wird und es funktioniert gut. Es ist nur in dieser einen Situation, dass es nicht funktioniert. Wir haben einen Workaround gemacht, der die Arbeit erledigt (Klicken auf einen Link zum Herunterladen), aber es stört mich, warum es nicht funktioniert. – bdowden