【发布时间】:2010-10-11 03:27:36
【问题描述】:
使用 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 视频文件。
【问题讨论】:
-
这是我使用的一种方法,它添加了可恢复的下载功能,如果流式传输视频将非常有用:stackoverflow.com/a/6475414/222748
标签: asp.net flash streaming video-streaming