4

HttpPostedFileBase 経由でファイルを受け取る ASP.NET MVC アクションがあります。

できるだけ早くストリームから読み取りを開始したい。これは、(別のメカニズムを介して) アップロードの進行状況を報告できるようにするためです。私が抱えている問題は、アップロードされたファイルが完全に利用可能になるまで、このアクション内のブレークポイントにヒットしないことです。

完全にアップロードされる前に、投稿されたファイル ストリームを読み取るにはどうすればよいですか?

[HttpPost]
public ActionResult Upload(HttpPostedFileBase uploadFile)
{
    ... uploadFile has been fully uploaded before this point
}

編集: 更新 - HttpHandler を介してこのロジックを実装する別の方法を試しましたが、ストリームからの読み取りを開始した瞬間、ファイル ストリームがサーバーへのアップロードを完了するまでコードがブロックされます。

まだ運がありません。

4

1 に答える 1

1

問題は、HttpContext.Requestオブジェクトでいくつかのプロパティを使用すると、ASP.NETが完全な投稿データが処理されるまで待機することです。この問題を回避するための鍵は、HttpContext.Request.GetBufferlessInputStream()です。ただし、これには処理が必要であり、これを行うための組み込みの方法はありません。

最終的な解決策は、生の投稿データのマルチパートコンテンツを解析できるクラスを作成することでした。これは、ASP.NETのHttpContext.Requestコードでどのように行われるかを確認することで実現しました。System.Webでさまざまなコンポーネントを見つけ、自分のニーズに適応することができました。

このコードは、私がここで作成したプロジェクトの一部を構成しています。

https://journals.appsoftware.com/public/20/97/3819/programming-blog/development/asp.net-file-uploader-with-signalr-progress-bar-and-extended-input-stream-processing

于 2013-03-09T01:09:05.353 に答える