HttpHandler から Web フォームで大きなファイルをストリーミングしようとしています。ファイルをストリーミングしていないため、機能していないようです。代わりに、ファイルをメモリに読み込み、クライアントに送り返します。私は解決策を探していますが、解決策は、同じことをしているときにファイルをストリーミングしていることを示しています。ストリーミングする私の解決策は次のとおりです。
using (Stream fileStream = File.OpenRead(path))
{
context.Response.Cache.SetExpires(DateTime.UtcNow.AddMinutes(360.0));
context.Response.Cache.SetCacheability(HttpCacheability.Public);
context.Response.AppendHeader("Content-Type", "video/mp4");
context.Response.AppendHeader("content-length", file.Length);
byte[] buffer = new byte[1024];
while (true)
{
if (context.Response.IsClientConnected)
{
int bytesRead = fileStream.Read(buffer, 0, buffer.Length);
if (bytesRead == 0) break;
context.Response.OutputStream.Write(buffer, 0, bytesRead);
context.Response.Flush();
}
else
{
break;
}
}
context.Response.End();
}
コードをデバッグすると小さなファイルの場合に何が起こっているかというと、ビデオは再生されますが、context.Respond.End() 行に到達するまでは再生されません。ただし、大きなファイルの場合、ファイル全体をメモリに保存して問題を引き起こすため、これは機能しません。