【问题标题】:Providing downloads on ASP.net website在 ASP.net 网站上提供下载
【发布时间】:2010-05-20 12:40:44
【问题描述】:

我需要在 ASP.net 网站上提供大文件(2 GB 以上)的下载。自从我做了这样的事情已经有一段时间了(我已经在胖客户端世界中待了一段时间),并且想知道当前的最佳实践。理想情况下,我希望:

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

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

【问题讨论】:

    标签: asp.net download


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2016-01-25
      • 2011-06-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-31
      • 1970-01-01
      • 2011-01-04
      • 1970-01-01
      相关资源
      最近更新 更多