2012-03-19 66 views
3

我有一個用戶提供ID的ASP.NET頁面,然後我們從數據庫中提取一些數據並將其放入Excel電子表格中。我想在內存中創建Excel文件,然後允許用戶下載文件。我可以在服務器上創建一個文件,然後刪除它,但似乎沒有必要。根據錯誤處理,我可能會用這種方法孤立一個文件,等等。我可以從ASP.NET頁面下載內存流中創建的Excel文件嗎?

是這樣的可能嗎?或者我需要使用文件流?

在附註中,我使用EPPlus作爲API(快速插入它)。

回答

9

你想指定content-typecontent-dispisition頭像這樣 - Response.ContentType = "application/vnd.ms-excel" works in IE and firefox but not in Safari,然後流文件。一旦完成,打電話Response.End()停止應用程序的執行

代碼示例:

void StreamExcelFile(byte[] bytes) 
{ 
    Response.Clear(); 
    Response.ContentType = "application/force-download"; 
    Response.AddHeader("content-disposition", "attachment; filename=name_you_file.xls"); 
    Response.BinaryWrite(bytes); 
    Response.End(); 
} 
+0

簡單和直接的,這真是棒極了。謝謝達納。 – 2012-03-20 00:20:24

+0

嗨...如果我做ajax調用一個web api,返回一個excel的內存流,我該如何下載它在瀏覽器本身? – 2017-07-18 05:44:19

0

你要尋找的被稱爲通用的處理程序:

http://www.dotnetperls.com/ashx

簡而言之,你需要做的是定義上下文類型。你的情況是xls或xlsx。設置響應,並將用戶引導至處理程序。

它們將被提示下載文件。

3
ExcelPackage pck = new ExcelPackage(); 
..... 
..... 
..... 

byte[] bfr = pck.GetAsByteArray(); 
Response.ContentType = "application/application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; 
Response.AppendHeader("content-disposition", "attachment; filename=ExcelFileName.xlsx"); 

Response.OutputStream.Write(bfr, 0, bfr.Length); 
Response.Flush(); 
Response.Close(); 
相關問題