IIS7和x2B;ASP.NET大型媒体文件下载

IIS7和x2B;ASP.NET大型媒体文件下载,asp.net,.net,iis,download,Asp.net,.net,Iis,Download,我正试图在ASP.NET v4和IIS7中创建一个允许大文件下载的网站(下载的意思是浏览器不尝试播放视频或显示文本文件。我想强制用户选择保存文件的位置),但是我面临一些问题,坦率地说,这些问题困扰着我 现在,我发现了一个网站,它提供了一种通过http传输非常大的文件的方法: 但是,该源代码的问题是,在下载该文件时,我无法向http发送任何其他请求。因此,如果一个用户试图一次下载多个文件,它将一直保存到第一个请求完成为止 有没有什么方法可以执行非常大的基于媒体的文件下载,允许用户一次下载多个文件

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

现在,我发现了一个网站,它提供了一种通过http传输非常大的文件的方法:

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

有没有什么方法可以执行非常大的基于媒体的文件下载,允许用户一次下载多个文件,并要求用户选择保存文件的位置,而不是右键单击并另存为

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

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


谢谢

我认为您可以做的是从IIS中删除文件处理程序,这将导致文件被下载而不是打开。虽然我自己没有试过,但我认为这应该有效。

现在再加上一点上下文,我认为这可以简化很多:

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

现在,要强制提示保存文件而不是默认打开文件,请查看以下帖子中Darin的答案:


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

是否需要动态生成媒体文件?如果不是,而且它们是静态文件,我只需要设置一个单独的Apache服务器(或多个服务器)来处理大型静态文件——这正是它擅长的。如果您想强制下载,我认为您只需要通过配置覆盖MIME类型。通过应用程序复制数据效率很低。为什么一次不能下载多个文件?它应该支持它,除非您在该请求中使用SessionState。我没有考虑过(我确实考虑过制作一个基于C#的文件服务器,但再说一遍,apache是一个漂亮的服务器)。我确实在为每个下载请求使用会话状态。我这样做是为了在允许下载文件之前进行身份验证(媒体不是动态生成的)。我曾考虑过使用FTP,但该网站的目的是让用户不必做太多事情(Fisher Price是目标)。问题是,我需要在直接访问文件之间进行某种“过滤”。我不希望任何普通的joe能够访问这些文件,因此它们必须通过ASP页面,而不是通过IIS访问。谢谢你的建议。我还是会通读一遍,看看这是否是我想做的事情问题是,我需要会话来确保任何人都不能下载文件。也许我下载的方式不对?一个只读会话足以进行检查吗?尝试将iRequiresessionState切换为IReadOnlySessionState。只读版本不应该锁定会话并允许多个并发请求()我最初不理解您关于“HTTPHandler”的评论。几次google搜索之后,我不知道如何实现我的HTTP处理程序。所以,一旦我弄明白了这一部分,我将实现我的下载功能,并让您知道它是如何运行的lol(这里是ASP/IIS newb)实际上,一个HTTPHandler应该适用于ASP.net站点。在您的例子中,因为您使用的是MVC3,所以您可以在控制器中实现所有这些,并通过使用[SessionState(SessionStateBehavior.ReadOnly)]装饰控制器来更改会话行为。哇,明白了。非常感谢你!我真的认为这将是ASP的一个徒劳限制。:)干杯,伙计!