2012-03-07 104 views
0

我已經閱讀了一些過去的帖子,瞭解如何從網站下載Excel文件。因此,我已經設置了以下代碼:下載Excel文件

string path = MapPath(fname); 
string name = Path.GetFileName(path); 
string ext = Path.GetExtension(path); 
string type = "application/vnd.ms-excel"; 


if (forceDownload) 
{ 
    Response.AppendHeader("content-disposition", 
     "attachment; filename=" + name); 
} 

if (type != "") 
{ 
    Response.ContentType = type; 
    Response.WriteFile(path); 
    Response.End(); 
} 

但是,我沒有下載對話框。

我在IE 8和FireFox 10.0.2中都試過這個。
文件在那裏,它沒有被鎖定,並且它沒有被設置爲只讀。
我不確定是否出錯了。

+0

該代碼看起來不錯。你用什麼html元素下載文件?因爲你不能使用ajax組件。 – 2012-03-07 14:24:17

+0

你的標準鏈接按鈕 – Mike 2012-03-07 14:35:17

+0

Luiggi,你是對的我回去了,仔細檢查和鏈接按鈕是在一個Ajax容器,一旦我從那裏刪除它工作 – Mike 2012-03-07 15:15:25

回答

3

this link,你需要添加此line:

strFileName = Path.GetFileName(path); 
Response.TransmitFile(Server.MapPath(strFileName)); 

這將導致打開/另存爲對話框以SailBig.jpg的文件名作爲默認文件名預設彈出。

這當然假設你餵養一個已經存在的文件。如果您需要動態生成動態生成的內容 - 比如內存中生成的圖像[或任何文件],則可以使用Response.BinaryWrite()來傳輸字節數組或直接在Response.OutputStream中寫入輸出。

編輯:

微軟MSDN網站上有關於File Downloading詳細的解釋。它包括用於Java和.Net應用程序的兩個示例,其概念是相同的:

  1. 獲取響應。
  2. 答案:
    1. 將內容類型設置爲「APPLICATION/OCTET-STREAM」(表示沒有應用程序來打開文件)。
    2. 將標題設置爲「Content-Disposition」,「attachment; filename = \」「+ +」\「」。
    3. 將文件內容寫入響應中。
  3. 關閉響應。

因此,看MSDN的ASP.Net文件下載,你缺乏2.3步驟。你只是將文件名寫入響應中。

// transfer the file byte-by-byte to the response object 
System.IO.FileInfo fileToDownload = new 
    System.IO.FileInfo("C:\\downloadJSP\\DownloadConv\\myFile.txt"); 
Response.Flush(); 
Response.WriteFile(fileToDownload.FullName); 

有了這個例子中,你會成功下載你的文件,當然如果你能得到沒有問題:)文件。

編輯2:用來下載任何文件

HTML組件必須是一個普通的HTML請求。任何ajax請求下載文件將不起作用。微軟解釋說here。和主要報價:

它不可能通過JavaScript下載前後附加事件。瀏覽器出於安全原因不允許這種類型的事件。

+0

它被包裹在一個Ajax容器謝謝,並感謝大家的幫助.. – Mike 2012-03-07 15:16:41

+0

是的,我忘了提及,文件下載調用**不能從ajax調用**處理。 – 2012-03-07 15:22:31

+0

非常豐富 – sajad 2015-07-20 12:22:57

0

您需要的文件附件頭之前發送此:

Response.ContentType = "application/vnd.ms-excel" 

參見:Export data to excel file from Classic ASP failing

+0

但是不是使用ASP.Net的OP?您的鏈接指向用戶使用ASP Classic的帖子。 – 2012-03-07 14:34:22

+0

技術是一樣的。這都是關於標題。 – 2012-03-07 14:35:54

+0

好吧,我看着重做,所以Response.ContentType =「application/vnd.ms-excel」在AppendHeader之前,但仍然沒有。 – Mike 2012-03-07 14:38:58

0

嘗試增加這樣的HTTP標頭

Content-Type: application/force-download 
Content-Type: application/vnd.ms-excel 
Content-Type: application/download