【发布时间】:2012-09-10 23:42:12
【问题描述】:
我正在尝试创建一个允许大文件下载的网站(下载是指浏览器不会尝试播放视频或显示文本文件。我想强制用户选择一个地方保存文件)在 ASP.NET v4 和 IIS7 中,但是我遇到了一些问题,坦率地说,这让我很烦。
现在,我发现了一个网站,它提供了一种通过 http 流式传输甚至非常大的文件的方法: http://www.cnblogs.com/bestcomy/archive/2004/08/10/31950.aspx
然而,这个来源的问题是,当这个文件正在下载时,我无法向 http 发送任何其他请求。因此,如果用户尝试一次下载多个文件,它会一直停留在那里,直到第一个请求完成。
有没有什么方法可以执行非常大的基于媒体的文件下载,允许用户一次下载多个文件,并且需要用户选择保存位置,而不是必须右键单击并另存为?
编辑:只是为了扩展这一点,下载在会话页面后面(用户登录),所以我可以防止未经授权的用户下载文件(通过匿名的安全性不是安全性:P)。无论如何,我可以打开一个新的浏览器会话,然后登录并下载另一个文件(甚至是同一个文件),但是,任何进一步的请求都会在那里“加载”,直到下载完成。
另一个编辑:我正在使用 Razor MVC 框架,如果这改变了任何东西
谢谢!
【问题讨论】:
-
您需要即时生成媒体文件吗?如果不是,而且它们是静态文件,我只需设置一个单独的 Apache 服务器(或多个)来处理大型静态文件 - 这是它擅长的。如果你想强制下载,我想你只需要通过配置覆盖 MIME 类型。通过您的应用程序复制数据效率非常低。
-
为什么不能一次下载多个文件?它应该支持它,除非您在该请求中使用 SessionState。
-
我想我可以设置一个 apache 服务器。我没有考虑过(我确实考虑过制作一个基于 C# 的文件服务器,但话又说回来,apache 是一个漂亮的服务器)。我确实使用每个下载请求的会话状态。我在允许下载文件之前进行身份验证(媒体不是即时生成的)。我曾考虑过使用 FTP,但该网站的目的是让用户不必做太多事情(Fisher Price 是目标)。