使用 ASP.NET 流式传输文件的最佳方式是什么?
似乎有多种方法可以解决这个问题,我目前在 http 处理程序中使用Response.TransmitFile()方法,该方法将文件直接发送到浏览器。这用于各种事情,包括将 FLV 从 webroot 外部发送到嵌入式 Flash 视频播放器。
但是,这似乎不是一个可靠的方法。特别是Internet Explorer (7)有一个奇怪的问题,浏览器在观看一两个视频后就挂起。点击任何链接等都没有任何效果,让网站再次正常工作的唯一方法是关闭浏览器并重新打开它。
这也发生在其他浏览器中,但频率要低得多。基于一些基本测试,我怀疑这与文件流式传输的方式有关......也许连接没有正确关闭,或者类似的东西。
在尝试了一些不同的事情之后,我发现以下方法对我有用:
Response.WriteFile(path);
Response.Flush();
Response.Close();
Response.End();
这解决了上述问题,并且观看视频不再导致 Internet Explorer 挂起。
但是,我的理解是Response.WriteFile()首先将文件加载到内存中,并且鉴于某些正在流式传输的文件可能非常大,这似乎不是一个理想的解决方案。
我有兴趣了解其他开发人员如何在 ASP.NET 中流式传输大文件,尤其是流式传输 FLV 视频文件。