在ASP.net网站上提供下载

在ASP.net网站上提供下载,asp.net,download,Asp.net,Download,我需要在ASP.net网站上提供大文件(超过2GB)的下载。我已经有一段时间没有做过类似的事情了(我已经在厚客户端领域呆了一段时间),我想知道目前在这方面的最佳实践。理想情况下,我希望: 为了能够跟踪下载统计数据:#下载数量至关重要;实际发送的字节会更好 以与第三方下载管理器“配合良好”的方式提供下载。我们的许多用户的互联网连接不可靠,必须能够恢复下载 允许多个用户同时下载同一文件 我的下载文件对安全性不敏感,因此可以提供直接链接(“右键单击下载…”)。仅仅提供一个直接链接就足够了,让IIS

我需要在ASP.net网站上提供大文件(超过2GB)的下载。我已经有一段时间没有做过类似的事情了(我已经在厚客户端领域呆了一段时间),我想知道目前在这方面的最佳实践。理想情况下,我希望:

  • 为了能够跟踪下载统计数据:#下载数量至关重要;实际发送的字节会更好
  • 以与第三方下载管理器“配合良好”的方式提供下载。我们的许多用户的互联网连接不可靠,必须能够恢复下载
  • 允许多个用户同时下载同一文件

我的下载文件对安全性不敏感,因此可以提供直接链接(“右键单击下载…”)。仅仅提供一个直接链接就足够了,让IIS来处理它,然后使用一些日志分析器服务(有什么建议吗?)来编译和报告统计数据吗?或者我需要拦截下载请求,在数据库中存储一些信息,然后发送自定义响应吗?或者是否有ASP.net用户控件(内置或第三方)可以执行此操作?我感谢所有的建议。

我过去曾使用自定义http处理程序来提供此功能。我创建了一个download.axd并编写了一个简单的HttpHandler

public class DownloadHandler : IHttpHandler
{
    public void ProcessRequest(HttpContext context)
    {
        // Do some logging to track stats.

        // Set some custom response headers

        context.Response.TransmitFile(filename);
    }
}
TransmitFile方法的重要一点是,它将文件流式传输到响应,而不必将文件存储在内存中。这对于您的情况很重要,因为您处理的是大文件

您还需要在web.config中注册处理程序:

  <httpHandlers>
    <add verb="GET,HEAD" path="download.axd" type="DownloadHandler, MyAssemby"/>
  </httpHandlers>

仍然使用这种方法将很难跟踪发送给每个人的实际字节