IIS7 + ASP.NET大型媒体文件下载

时间:2012-09-10 23:42:12

标签: asp.net .net iis download

我正在尝试创建一个允许大文件下载的网站(浏览器不会尝试播放视频,或显示文本文件的下载。我想强制用户选择一个地方在ASP.NET v4和IIS7中保存文件),但是我面临一些问题,坦率地说这让我烦恼。

现在,我找到了一个网站,它提供了一种通过http传输即使是非常大的文件的方法: http://www.cnblogs.com/bestcomy/archive/2004/08/10/31950.aspx

此源的问题是,在下载此文件时,我无法向http发送任何其他请求。因此,如果用户尝试一次下载多个文件,它将一直存在,直到第一个请求完成。

有没有办法执行非常大的基于媒体的文件下载,允许用户一次下载多个,并且需要用户选择保存位置,而不是必须右键单击并保存为?

编辑:为了扩展这一点,下载是在会话页面(用户登录)后面,因此我可以防止未经授权的用户下载文件(通过匿名安全性不是安全性:P)。无论如何,我可以打开一个新的浏览器会话,登录并下载另一个文件(或者甚至是同一个文件),但是,任何进一步的请求都会在那里“加载”直到下载完成。

另一个编辑:我正在使用Razor MVC框架,如果它改变了什么

谢谢!

2 个答案:

答案 0 :(得分:2)

我相信你可以做的是从IIS中删除文件处理程序,这将导致文件被下载而不是被打开。虽然我自己没有尝试过,但我认为这应该有效。 http://technet.microsoft.com/en-us/library/cc771240(v=ws.10).aspx

答案 1 :(得分:1)

现在有了更多的上下文,我认为这可以简化一点:

要允许并发下载,您需要确保会话是只读的。在MVC3中,您将使用[SessionState(SessionStateBehavior.ReadOnly)]装饰控制器,以进行自定义安全检查。现在,我不知道您的实现,但考虑到安全性通常通过使用Authorize属性或类似属性来处理。

现在,要强制提示保存文件而不是默认打开文件,请在以下帖子中检查Darin的答案:https://stackoverflow.com/a/5830215/1373170

如果标准FileResult符合您的需要,您可以避免使用自定义代码下载文件。