我想從HttpHandler流式傳輸大型文件。它似乎不工作,因爲它沒有流式傳輸文件。相反,它將文件讀入內存,然後將其發送回客戶端。我期待所有的解決方案,並且解決方案告訴我,他們在做同樣的事情時會傳輸文件。我的解決方案,流是這樣的:流式傳輸大型視頻文件.net
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()線。但對於大文件,這不起作用,因爲它將整個文件存儲在內存中,這會帶來問題。
您可能希望與['IHttpAsyncHandler'](http://msdn.microsoft.com/en-us/library/system.web.ihttpasynchandler.aspx)異步實現此操作,並異步讀取磁盤。 – vcsjones
@ vcsjones-我不確定Async是如何工作的,但只是做了一個快速谷歌,我不知道如何解決這個問題。這似乎釋放了一個線程返回到客戶端異步從磁盤讀取,但會返回內容,因爲它仍然從磁盤讀取? – Jake