似乎有多种方法可以实现这一目标,我目前正在使用Response.TransmitFile()方法在HTTP处理程序中发送文件到浏览器。其中包括从Web根目录外部发送FLV文件到嵌入式Flash视频播放器。
然而,这似乎不是一种可靠的方法。特别是在Internet Explorer(7)中存在一个奇怪的问题,在浏览一两个视频后,浏览器就会挂起。单击任何链接等都没有效果,使网站重新运行的唯一方法是关闭浏览器并重新打开它。
这在其他浏览器中也会发生,但频率要低得多。根据一些基本测试,我怀疑这与文件流传输方式有关...或许连接没有正确关闭或类似的原因。
尝试了几种不同的方法后,我发现以下方法对我有效:
Response.WriteFile(path);
Response.Flush();
Response.Close();
Response.End();
这种方法绕过了上述问题,现在浏览视频不再导致Internet Explorer挂起。
然而,我理解Response.WriteFile()会先将文件加载到内存中,鉴于某些流式传输的文件可能非常大,这似乎并不是一个理想的解决方案。
我很想听听其他开发人员如何在ASP.NET中流式传输大文件,尤其是流式传输FLV视频文件。