在ASP.net网站上提供下载

时间:2010-05-20 12:40:44

标签: asp.net download

我需要在ASP.net网站上提供大文件(超过2 GB)的下载。自从我做了这样的事情已经有一段时间了(我现在已经进入了厚厚的客户端世界一段时间了),并且想知道当前的最佳做法。理想情况下,我想:

  • 能够跟踪下载统计信息:下载次数至关重要;发送的实际字节数会很好。
  • 以与第三方下载管理器“玩得很好”的方式提供下载。我们的许多用户都有不可靠的互联网连接,并且能够恢复下载是必须的。
  • 允许多个用户同时下载同一文件。

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

1 个答案:

答案 0 :(得分:3)

我过去曾使用自定义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>

仍然使用这种方法,很难跟踪发送给每个人下载的实际字节数。