从 MVC 下载 EPPlus Excel 会导致内存不足异常



我使用以下代码将 EPPlus 包作为 asp.net MVC 中的 Excel 文件发送到客户端。 但是,我遇到了大文件抛出内存异常异常的问题。

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

有没有办法直接从ExcelPackage流式传输响应,而不是在发送之前为其分配内存块?

不幸的是,对于

EPPlus来说,这可能是太多的数据。 有关一些背景信息,请参阅以下内容:

EPPlus, 处理大 ExcelWorksheet

对某些人有用的一件事是编译到 64 位(如果这是一个选项):

具有内存不足异常的 EPPlus 大型数据集问题

否则,您将不得不自己创建xml文件或进行某种VBA集成。 两者都不好看。

相关内容

  • 没有找到相关文章

最新更新