我需要在ASP.net网站上提供大文件(超过2 GB)的下载。自从我做了这样的事情已经有一段时间了(我现在已经进入了厚厚的客户端世界一段时间了),并且想知道当前的最佳做法。理想情况下,我想:
我的下载文件对安全性不敏感,因此提供直接链接(“右键单击下载...”)是可能的。只提供足够的直接链接,让IIS处理它,然后使用一些日志分析器服务(任何建议?)来编译和报告统计信息?或者我是否需要拦截下载请求,将某些信息存储在数据库中,然后发送自定义响应?或者是否有ASP.net用户控件(内置或第三方)执行此操作?我感谢所有的建议。
答案 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>
仍然使用这种方法,很难跟踪发送给每个人下载的实际字节数。