2009-07-07 12 views
1

文字列にファイルパス(path、以下)を作成した後(PathSystem.IOですが、他の人のコードを使用しており、Pathを使用するようにリファクタリングする機会はありません)。私は、ユーザーにファイルを提供するためにFileStreamを使用しています(下記参照):Response.End()Response.Close()の使用を避けるためにASP.NET How To Stream File To Userな理由:FileStreamを使用してファイルをダウンロードすると、ページエラーメッセージがファイル名ではなくaspxページ名を参照するのはなぜですか?

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(); 

私から見てきました。 ファイルを転送するさまざまな方法についていくつかの記事を見て、同僚との問題(httpsとhttpヘッダー)の解決策を見つけて見つけました。

ただし、表示されていたエラーメッセージは、pathのファイルへのアクセスではなく、aspxファイルです。

編集:エラーメッセージは次のとおりです。

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. (ページ名とアドレスが匿名)

これはなぜでしょうか?そのアドレスでアクセスされているファイルではなく、HTTP応答.Flush()メソッドからのファイルの内容が原因ですか?

+0

メッセージを表示することができますか? –

答えて

2

ファイルを送信しても、送信しているファイルを説明するヘッダー情報が含まれているのは「ページ」です。ブラウザはまだそのページをダウンロードしなければならず、次に「添付ファイル;ファイル名=」が表示され、代わりにファイルが提供されます。

エラーがある場合は、問題として表示されるページになります。添付ファイル付きの電子メールを破損したようなものですが、添付ファイル自体ではなく電子メールの問題を確認しました。

Response.End()をコールしないでください。

関連する問題