2009-07-07 1 views
1

Nach dem Erstellen eines Dateipfads (path, unten) in einer Zeichenfolge (ich bin bekannt Path in System.IO, aber ich benutze jemand anderen Code und nicht die Möglichkeit, es umzufunktionieren, um Path zu verwenden). Ich bin ein FileStream mit der Datei an den Benutzer zu liefern (siehe unten):Warum wird beim Herunterladen einer Datei mit FileStream die Seitenfehlermeldung auf den Namen der ASPX-Seite und nicht auf den Dateinamen verwiesen?

FileStream myStream = new FileStream(path, FileMode.Open, FileAccess.Read); 
long fileSize = myStream.Length; 
byte[] Buffer = new byte[(int)fileSize + 1]; 
myStream.Read(Buffer, 0, (int)myStream.Length); 
myStream.Close(); 
Response.ContentType = "application/csv"; 
Response.AddHeader("content-disposition", "attachment; filename=" + filename); 
Response.BinaryWrite(Buffer); 
Response.Flush(); 
Response.End(); 

Ich habe aus gesehen: ASP.NET How To Stream File To User Gründen Verwendung von Response.End() und Response.Close() zu vermeiden. Ich habe auch mehrere Artikel über verschiedene Möglichkeiten zur Übertragung von Dateien gesehen und habe eine Lösung für das Problem (https und http Header) mit einem Kollegen diagnostiziert und gefunden.

Die Fehlermeldung, die angezeigt wurde, war jedoch nicht über den Zugriff auf die Datei unter path, sondern die aspx-Datei.

Edit: Fehlermeldung ist:

Internet Explorer cannot download MyPage.aspx from server.domain.tld

Internet Explorer was not able to open this Internet site. The requested site is either unavailable or cannot be found. Please try again later. (Seite Name und Anschrift anonymisiert)

Warum ist das? Liegt es daran, dass der Inhalt der Datei von der HTTP-Antwort .Flush() stammt und nicht auf eine Datei, auf die an ihrer Adresse zugegriffen wird?

+0

können Sie eine Nachricht anzeigen bekommen? –

Antwort

2

Obwohl Sie eine Datei senden, ist es die "Seite", die die Kopfinformation enthält, die die Datei beschreibt, die Sie senden. Der Browser muss diese Seite immer noch herunterladen, sieht dann den "attachment; filename =" und gibt Ihnen stattdessen die Datei.

Also wenn es einen Fehler gibt, wird es Seite sein, die als das Problem angezeigt wird. Es ist ein bisschen so, als würde man eine beschädigte E-Mail mit einem Anhang erhalten. Sie haben das Problem in der E-Mail und nicht im Anhang selbst gesehen.

Nicht Response.End();

Verwandte Themen