2011-10-28 4 views
1

WebサーバーがHTTP経由で別のソースからファイルを取得して同時にブラウザにストリームするファイルダウンロード機能を提供する必要があります。私はMVCのController.FileのActionResultを使用して動作しないこと推測していますが、私はとにかく、このようなプロトタイプを書いた:ASP.NET MVC 3は、サーバーが他の場所からファイルを取得しているときにブラウザに大きなファイルをダウンロードします。

public ActionResult Download() 
{ 
    HttpWebRequest webRequest = (HttpWebRequest)HttpWebRequest.Create("http://somewhere/somefile.pdf"); 
    HttpWebResponse webResponse = (HttpWebResponse)webRequest.GetResponse(); 
    Stream stream = webResponse.GetResponseStream(); 
    var mimeType = "application/pdf"; 
    var fileName = "somefile.pdf"; 
    return File(stream, mimeType, fileName); 
} 

これはうまく動作しますが、コールする方法はありませんHttpWebResponseのとストリームの後に()を閉じますreturnステートメントHttpWebResponse.GetResponseStreamメソッドのhelpには、「Stream.CloseメソッドまたはHttpWebResponse.Closeメソッドのいずれかを呼び出してストリームを閉じ、再利用のために接続を解放する必要があります。Stream.CloseとHttpWebResponseの両方を呼び出す必要はありません.Closeストリームを閉じることができないと、アプリケーションの接続が不足する可能性があります。

HttpHandlerを作成し、ソースストリームからバイトを手動で読み込んで、thisまたはthisの行に沿ってレスポンスに書き出す必要がありますか?私が気づいていない別のアプローチがありますか?

+0

[この質問](http://stackoverflow.com/questions/2129428/does-file-in-asp-net-mvc-close-the-stream)によると、フレームワークはストリームを閉じますこの場合。 –

答えて

0

私はこのようなことに直接慣れていませんが、最初はストリームでの読み込み、接続の終了、応答としてのバイトの返り方について提案したことをやっていました。ストリームであるため、プロトタイプのようにコンテンツを返すためにどのように開いていくのかはわかりませんが、完了したら閉じることができます。

関連する問題