2015-11-02 78 views
-2

我正試圖在客戶機上下載文件。沒有客戶的知識,我們不會去做。該文件已存儲在服務器上。我有文件路徑,我已經嘗試了下面的方法。但它似乎並不奏效。我正在使用當前版本的Google Chrome。它一直在失敗。如何使用C#在客戶機上下載文件

try{ 
      string Filpath = ParseRequest.GetFileDetails(fileId); 
      FileInfo file = new FileInfo(Filpath); 
      string fileLength = file.Length.ToString(); 
      string fileName = file.Name; 
      string fullName = file.FullName;     
      if (file.Exists) 
      { 
       Response.ClearContent();      
       Response.ContentType = "application/pdf";     
       Response.AddHeader("Content-Length", fileLength); 
       Response.AddHeader("Content-Disposition", "attachment; filename=" + fileName);     
       Response.Write(fullName); 
       Response.Flush(); 
       Response.Close(); 
      }else{ 
       Response.Write("This file does not exist."); 
      } 
     }catch(Exception ex){ 
      XLog.Error(ex); 
     } 

下面是響應我得到的截圖: enter image description here

+1

「看起來不起作用」不足以幫助我們幫助您診斷此問題。有拋出異常嗎?有沒有記錄錯誤?它在其他瀏覽器中工作嗎?你有沒有通過設置斷點和看代碼在做什麼來調試? –

+0

你不能通過下載來開車。那味道非常不好。 –

+1

對於PDF,你需要'Response.BinaryWrite()'和'Response.ContentType =「application/octet-stream」;'(或簡單的'.WriteFile()') –

回答

1

它看起來像你試圖調用文件下載(通過content-dispostion: attachment頭)後​​面的AJAX請求。瀏覽器不允許出於明顯的安全原因。因此,只需導航到在服務器上調用下載操作的URL,而不是試圖抓取AJAX請求的結果。

window.location = "path/to/downloadaction.aspx/GetFile/?fileId=xxx"; 

您指定將指示瀏覽器發出請求的頭,但不是執行重定向到一個頁面的響應時,瀏覽器會顯示文件下載對話框,讓你的頁面上,其中按鈕被點擊。

如果您需要POST數據以執行文件下載請求,您可以使用嵌入式 - 不幸的是它們仍然可以解決AJAX文件限制。

編輯亞歷克斯K.是正確的意見,以及,你需要將文件的字節加入到通過Response.BinaryWrite(pdfBytes)響應,所以你需要有一個File.ReadAllBytes()地方。

+0

非常感謝!這確實有幫助! – newDevGeek

相關問題