接続がリセットされ、最大リクエスト長をある程度まで上げることができる理由はいくつか考えられますが、非同期ファイル アップローダーを調べているのは正しいことです。最も重要な部分は、ファイルを小さな断片に「チャンク」して、リクエスト制限などを回避するものを使用することです。私はpluploadで最高の経験をしました:
http://www.plupload.com/
ファイルを受信するためのコードを次に示します (これは MVC ですが、.NET クラシックでハンドラーを使用するようにリファクタリングできます)。
[HttpPost]
public ActionResult UploadImage(int? chunk, int? chunks, string name)
{
var fileData = Request.Files[0];
if (fileData != null && fileData.ContentLength > 0)
{
var path = GetTempImagePath(name);
fileSystem.EnsureDirectoryExistsForFile(path);
// Create or append the current chunk of file.
using (var fs = new FileStream(path, chunk == 0 ? FileMode.Create : FileMode.Append))
{
var buffer = new byte[fileData.InputStream.Length];
fileData.InputStream.Read(buffer, 0, buffer.Length);
fs.Write(buffer, 0, buffer.Length);
}
}
return Content("Chunk uploaded", "text/plain");
}