2009-07-20 9 views
3

HttpPostedFileクラスを使用して、1つ以上の大きなファイルをWebページからASP.NET MVCコントローラにアップロードします。このクラスを使用すると、256 KBを超えるアップロードされたファイルは、サーバーのメモリに保持されるのではなく、ディスクにバッファリングされます。HttpPostedFileクラスを使用してアップロードの進捗状況を取得する方法はありますか?

私の理解では、それが次のように行うことができることである。

if (context.Request.Files.Count > 0) 
{ 
    string tempFile = context.Request.PhysicalApplicationPath; 
    for(int i = 0; i < context.Request.Files.Count; i++) 
    { 
     HttpPostedFile uploadFile = context.Request.Files[i]; 
     if (uploadFile.ContentLength > 0) 
     { 
      uploadFile.SaveAs(string.Format("{0}{1}{2}", 
       tempFile,"Upload\\", uploadFile.FileName)); 
     } 
    } 
} 

ようにAJAXやJSONを経由してWebページを定期的にコールバック、または他のいくつかの方法を使用して、リターン・ステータスを設定する方法はあります進行状況バーと完了したパーセントを表示できますか?コードはどのように見えますか?

答えて

4

いいえ。 Asp.netは、HttpRequest.InputStreamを使用するとすぐにリクエストコンテンツ全体をロードします。

このようなフィードバックを提供したい場合は、クライアント側でflashなどを使用して行うか、直接HttpWorkerRequestメソッドに直接アクセスしてエンティティ本体をロードします。

+0

ありがとう私はこれもいくつかの問題がある、[私の質問を参照してください](http://stackoverflow.com/q/11779751/340045)、自分のHTTPハンドラを書く上で良いチュートリアルを知っていますか? – Ben

+0

これが見つかりました[投稿](http://forums.asp.net/p/1099698/1672357.aspx) – Ben

+0

もう一つの良い[記事](http://dotnetslackers.com/Community/blogs/haissam/archive/) 2008/09/12/upload-large-files-in-asp-net-using-httpmodule.aspx) – Ben

0

私はserialsebに同意する傾向があります。そのような進捗状況を照会するための特定のアクションを備えたイベントにアップロード進捗状況を出力する可能性のある独自のHTTPハンドラを作成し、クライアントが定期的に更新を照会できるようにする必要があります。