2012-07-02 25 views
2

完成了我們的項目,我們需要的功能從服務器下載文件到客戶端的位置之一。如何識別是否下載使用一個ASHX處理程序

爲此,我們使用的是ASHX處理程序做了手術。它的工作完美,我們可以下載文件。

現在我們需要一個類似的要求,我們需要更新字段時下載開始並完成。有沒有辦法做到這一點。

一旦點擊下載鏈接另存爲對話框將出現之後,我覺得我們沒有任何控制,檢查進度。我想我們甚至不知道點擊了哪個按鈕,即我們不知道用戶是否點擊了「是」或「否」。

任何人都可以請建議當下載開始知道一個方法,當已經完成了嗎?我們在c#中使用Asp.Net 2.0。

用於下載的處理程序如下

   string fileUrl = string.Empty; 

       if (context.Request["fileUrl"] != null) 
       { 
        fileUrl = context.Request["fileUrl"].ToString();      
       } 
       string filename = System.IO.Path.GetFileName(fileUrl); 

       context.Response.ClearContent(); 
       context.Response.ContentType = "application/exe"; 
       context.Response.AddHeader("content-disposition", String.Format("attachment; filename={0}", filename)); 
       context.Response.TransmitFile(fileUrl); 
       context.Response.Flush(); 

給出的文件從一個aspx頁面的方法,如果下載開始下載喜歡

private void DownloadExe() 
{ 
    string downloadUrl = "Test.exe"); 
    Response.Redirect("Test.ashx?fileUrl=" + downloadUrl, false); 
} 

回答

1

你ASHX處理程序knwos(因爲它實際上是被調用)和下載完成時(處理程序結束)。如果您以區塊方式手動編寫響應,您甚至可能會得到一些進度服務器端,這樣,當用戶取消下載時(如果寫入響應流某些時候失敗),您也可能會檢測到一些情況。

根據您的需求,你可能可以將此信息傳輸到其他頁面(即通過會話狀態),或者簡單地存儲在某個數據庫。

+0

是的,當我們點擊處理程序意味着我認爲下載即將開始。但是現在用戶也可以選擇單擊是或否來執行或取消下載。我沒有讓你知道如何知道下載何時開始或取消。你可以在網上提供任何樣品嗎?謝謝.. –

+0

您合理可以看到的唯一的事情就是向服務器上的ASHX處理程序發出GET請求。您無法控制瀏覽器顯示UI的方式,以及它在何處讓用戶選擇保存/打開/取消。如果你想獲得超越GET開始/響應發送/連接關閉的東西,你將不得不建立你自己的下載客戶端(不可能通過瀏覽器)。 –

+0

那麼處理程序如何知道下載何時開始以及何時完成? –

1

如何:

Response.BufferOutput = false; 
Response.TransmitFile(fileUrl); 
//download complete code 

如果禁用響應輸出緩衝,纔不會搬過去的代碼,直到客戶端已完成接收它的文件發送到客戶端的線路。如果他們取消下載的一半,則會拋出HttpException,因此下載完成的代碼無法運行。

你也可以在你的調用之後放置你的下載完成代碼來清空緩衝區。但最好不要在發送大型二進制文件以保存服務器內存時啓用緩衝。