2012-03-19 68 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(); 
相关问题