2014-02-10 102 views
0

我試圖提供一個鏈接,下載一個asp.net網頁上的zip文件,但只是不能得到它的工作。無法創建鏈接從服務器下載文件

任何人都可以發現我做錯了什麼嗎?

我有以下鏈接

<a href="#" runat="server" ID="lnkDownload" 
Text="Download Zip" onServerClick="DownloadFile">Download TestFile</a> 

和代碼隱藏,

protected void DownloadFile(object sender, EventArgs eventArgs) 
{ 
    string DownloadPath = "/Members/Download/TestFile.zip"; 
    //string DownloadPath = "~/Members/Download/TestFile.zip"; 
    Response.ContentType = "application/octet-stream"; 
    Response.AddHeader("Content-Disposition", 
      "attachment; filename=\"" + "TestFile.zip" + "\""); 
    Response.Clear(); 
    Response.WriteFile(DownloadPath); 
    Response.End(); 
} 

的代碼鏈接被點擊時運行,但沒有下載,然後我得到Response.End();這是

錯誤

A first chance exception of type 'System.Threading.ThreadAbortException' occurred in mscorlib.dll

+0

你有什麼真正的錯誤。 「第一次機會例外」通常並不重要。 「真實」示例爲您提供了一條線索 –

+0

詳細信息顯示「無法評估表達式,因爲代碼已優化或本機框架位於調用堆棧之上。」 – user3357963

+0

你有什麼其他異常?也許在你的代碼中添加try和catch來獲取你感興趣的異常的細節。 –

回答

0

試試驗證碼:

Response.AddHeader("Content-Disposition", "attachment; filename=" + DownloadPath); 
Response.ContentType = "application/octet-stream"; 
Response.TransmitFile(DownloadPath); 
Response.Flush(); 

---更新後的代碼

var fileInfo = new System.IO.FileInfo(DownloadPath); 

      if (fileInfo.Exists) 
      { 
       Response.Clear(); 
Response.ContentType = "application/octet-stream"; 
       Response.BufferOutput = true; 
       Response.AddHeader("Content-Disposition", "attachment; filename=" + fileInfo.Name); 
       Response.AddHeader("Content-Length", fileInfo.Length.ToString()); 

       Response.TransmitFile(fileInfo.FullName); 
       Response.Flush(); 


      } 
      else 
      { 
       throw new Exception("File not found"); 
      } 
+0

我不再使用此代碼得到任何錯誤,代碼運行但沒有保存文件對話框? – user3357963

+0

由於TransmitFile只是沒有觸發而與回發有關嗎? – user3357963

+0

確保文件在您提供的路徑下退出。 –