我可以从ASP.NET页面下载由内存流生成的Excel文件吗?

gpnt7bae  于 2023-08-08  发布在  .NET
关注(0)|答案(4)|浏览(154)

我有一个ASP.NET页面,用户在其中提供一个ID,然后我们从DB中提取一些数据并将其放入Excel电子表格中。我想在内存中创建Excel文件,然后允许用户下载该文件。我可以在服务器上创建一个文件,然后删除它,但这似乎是不必要的。根据错误处理的不同,我可能会使用这种方法孤立一个文件,等等。
这种事有可能发生吗?或者,我是否需要使用文件流?
顺便说一句,我使用EPPlus作为API(快速插件)。

bmvo0sr5

bmvo0sr51#

您希望指定Content-TypeContent-Dispisition头文件,如so -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_your_file.xls");
    Response.BinaryWrite(bytes);
    Response.End();
}

字符串

kpbwa7wx

kpbwa7wx2#

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();

字符串

yvfmudvl

yvfmudvl3#

是的,请研究使用HTTP处理程序将文件从内存流传输到浏览器。
http://msdn.microsoft.com/en-us/library/ms972953.aspx

zte4gxcn

zte4gxcn4#

您要查找的内容称为泛型处理程序:
http://www.dotnetperls.com/ashx
简而言之,您需要做的是定义上下文类型。在您的情况下,将是一个xls或xlsx。设置响应,并将用户定向到处理程序。
系统将提示用户下载文件。

相关问题