我有一個用戶提供ID的ASP.NET頁面,然後我們從數據庫中提取一些數據並將其放入Excel電子表格中。我想在內存中創建Excel文件,然後允許用戶下載文件。我可以在服務器上創建一個文件,然後刪除它,但似乎沒有必要。根據錯誤處理,我可能會用這種方法孤立一個文件,等等。我可以從ASP.NET頁面下載內存流中創建的Excel文件嗎?
是這樣的可能嗎?或者我需要使用文件流?
在附註中,我使用EPPlus作爲API(快速插入它)。
我有一個用戶提供ID的ASP.NET頁面,然後我們從數據庫中提取一些數據並將其放入Excel電子表格中。我想在內存中創建Excel文件,然後允許用戶下載文件。我可以在服務器上創建一個文件,然後刪除它,但似乎沒有必要。根據錯誤處理,我可能會用這種方法孤立一個文件,等等。我可以從ASP.NET頁面下載內存流中創建的Excel文件嗎?
是這樣的可能嗎?或者我需要使用文件流?
在附註中,我使用EPPlus作爲API(快速插入它)。
你想指定content-type
和content-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();
}
你要尋找的被稱爲通用的處理程序:
http://www.dotnetperls.com/ashx
簡而言之,你需要做的是定義上下文類型。你的情況是xls或xlsx。設置響應,並將用戶引導至處理程序。
它們將被提示下載文件。
是的,請使用HTTP處理程序將文件從內存中傳輸到瀏覽器。
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();
簡單和直接的,這真是棒極了。謝謝達納。 – 2012-03-20 00:20:24
嗨...如果我做ajax調用一個web api,返回一個excel的內存流,我該如何下載它在瀏覽器本身? – 2017-07-18 05:44:19