2010-05-20 78 views
4

我需要在ASP.net網站上提供大文件(2GB以上)的下載。自從我做了這樣的事情之後,我已經有一段時間了(我現在一直在厚厚的客戶世界),並且對目前的最佳實踐感到疑惑。理想情況下,我想:在ASP.net網站上提供下載

  • 要能夠跟蹤下載統計信息:下載數量是必不可少的;實際發送的字節會很好。
  • 以與第三方下載管理器「很好」的方式提供下載。我們的許多用戶具有不可靠的互聯網連接,並且能夠恢復下載是必須的。
  • 允許多個用戶同時下載同一個文件。

我的下載文件不安全敏感,因此提供直接鏈接(「右鍵單擊以下載...」)是一種可能性。只是提供足夠的直接鏈接,讓IIS處理它,然後使用一些日誌分析器服務(任何建議?)來編譯和報告統計信息?或者我需要攔截下載請求,將某些信息存儲在數據庫中,然後發送自定義響應?或者有沒有這樣做的ASP.net用戶控件(內置或第三方)?我欣賞所有建議。

回答

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> 

還是用這種方法將很難跟蹤發送到每個人下載的實際字節。

+0

+1非常好的例子! – Dal 2010-05-20 14:50:59