EPPlus Excel 从 MVC 下载导致内存不足异常
EPPlus Excel download from MVC causes an out of memory exception
我正在使用以下代码将 EPPlus 包作为 Excel MVC 中的 Excel 文件发送到客户端。但是,我遇到了大文件抛出 OutOfMemoryException 异常的问题。
public class ExcelPackageResult : ActionResult
{
public ExcelPackage ExcelPackage { get; set; }
private string _fileName;
public ExcelPackageResult(ExcelPackage excelPackage, string fileName)
{
ExcelPackage = excelPackage;
_fileName = fileName;
}
public override void ExecuteResult(ControllerContext context)
{
context.HttpContext.Response.ClearContent();
ExcelPackage.SaveAs(context.HttpContext.Response.OutputStream);
context.HttpContext.Response.AddHeader("content-disposition", string.Format(@"attachment;filename=""{0}.xlsx""", _fileName));
context.HttpContext.Response.ContentType = "application/excel";
context.HttpContext.Response.Flush();
context.HttpContext.Response.End();
ExcelPackage.Dispose();
}
}
问题在行:ExcelPackage.SaveAs(context.HttpContext.Response.OutputStream);
我也试过:
context.HttpContext.Response.BinaryWrite(ExcelPackage.GetAsByteArray());
有没有办法直接从 Excel 包流式传输响应,而不是在发送之前为其分配一块内存?
不幸的是,对于 EPPlus 来说,这可能是太多的数据。了解一些背景信息:
对某些人有用的一件事是编译为 64 位,如果可以的话:
EPPlus Large Dataset Issue with Out of Memory Exception
否则,您将不得不自己创建 xml 文件或进行某种 VBA 集成。都不漂亮
我正在使用以下代码将 EPPlus 包作为 Excel MVC 中的 Excel 文件发送到客户端。但是,我遇到了大文件抛出 OutOfMemoryException 异常的问题。
public class ExcelPackageResult : ActionResult
{
public ExcelPackage ExcelPackage { get; set; }
private string _fileName;
public ExcelPackageResult(ExcelPackage excelPackage, string fileName)
{
ExcelPackage = excelPackage;
_fileName = fileName;
}
public override void ExecuteResult(ControllerContext context)
{
context.HttpContext.Response.ClearContent();
ExcelPackage.SaveAs(context.HttpContext.Response.OutputStream);
context.HttpContext.Response.AddHeader("content-disposition", string.Format(@"attachment;filename=""{0}.xlsx""", _fileName));
context.HttpContext.Response.ContentType = "application/excel";
context.HttpContext.Response.Flush();
context.HttpContext.Response.End();
ExcelPackage.Dispose();
}
}
问题在行:ExcelPackage.SaveAs(context.HttpContext.Response.OutputStream);
我也试过:
context.HttpContext.Response.BinaryWrite(ExcelPackage.GetAsByteArray());
有没有办法直接从 Excel 包流式传输响应,而不是在发送之前为其分配一块内存?
不幸的是,对于 EPPlus 来说,这可能是太多的数据。了解一些背景信息:
对某些人有用的一件事是编译为 64 位,如果可以的话:
EPPlus Large Dataset Issue with Out of Memory Exception
否则,您将不得不自己创建 xml 文件或进行某种 VBA 集成。都不漂亮