我有一个用户提供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