HttpPostedFile などの .NET でファイルをアップロードするさまざまな方法を見て、HttpHandler を使用して、プロセスがどのように機能するかをもう少し詳しく理解しようとしています。
具体的には、情報をファイルに書き込む方法です。
私は次のものを持っているとしましょう:
HttpPostedFile file = context.Request.Files[0];
file.SaveAs("c:\temp\file.zip");
完全なストリームが処理されるようになるまで、実際のファイルは作成されません。
同様に:
using (Stream output = File.OpenWrite("c:\temp\file.zip"))
using (Stream input = file.InputStream)
{
byte[] buffer = new byte[8192];
int bytesRead;
while ((bytesRead = input.Read(buffer, 0, buffer.Length)) > 0)
{
output.Write(buffer, 0, bytesRead);
}
}
これは、ストリームを読み取るときにファイルを「プログレッシブ」に書き込むと考えていました。ファイルシステムを見ると、これはまったく行われていないようです。while 内でブレークポイントを指定すると、それは実行されます。
私がやろうとしているのは、(javascript アップローダーを使用して) ファイルをアップロードし、ポーリングすることです。これにより、ポーリング ajax リクエストは、アップロードされたファイルの fileinfo(ファイル サイズ) を毎秒取得しようとします。ただし、アップロードが完了するまでは常に 0 を返します。
Vimeo はこのタイプの機能を実行できるようです (IE の場合)?? これは .NET の制限ですか、それともストリームからファイルを段階的に書き込む方法はありますか?