ASP.NET MVC FileResult正在破坏文件

时间:2016-03-14 01:25:00

标签: c# asp.net-mvc excel asp.net-mvc-5

我一直试图让我的ASP.NET MVC网站将一些数据导出为Excel文件。几个小时我以为NPOI只是在生产垃圾,所以我换了EPPlus。我在LINQPad中对它进行了测试,并创建了一个正常工作的XLSX文件,因此我将代码移到了MVC应用程序中。再次,我收到了损坏的文件。偶然的机会我碰巧看了临时目录,看到EPPlus创建的文件是3.87KB并且工作正常,但FileResult返回的文件是6.42KB,已损坏。为什么会这样?我在某地读到它是服务器GZip压缩导致它,所以我关闭它,它没有任何影响。有人,请帮助我,我已经忘记了...这是我的代码。

[HttpGet]
public FileResult Excel(
    CenturyLinkOrderExcelQueryModel query) {
    var file = Manager.GetExcelFile(query); // FileInfo

    return File(file.FullName, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", query.FileName);
}

2 个答案:

答案 0 :(得分:2)

就我而言,FileResult及其伴随的方法存在问题。我结束了#34;解决"覆盖Response对象的问题:

[HttpGet]
public void Excel(
    CenturyLinkOrderExcelQueryModel query) {
    var file = Manager.GetExcelFile(query);

    Response.Clear();
    Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
    Response.AddHeader("Content-Disposition", "attachment; filename=" + query.FileName);
    Response.BinaryWrite(System.IO.File.ReadAllBytes(file.FullName));
    Response.Flush();
    Response.Close();
    Response.End();
}

答案 1 :(得分:0)

尝试使用OpenRead中的FileInfo获取文件流,看看是否有效。

[HttpGet]
public FileResult Excel(CenturyLinkOrderExcelQueryModel query) {
    var file = Manager.GetExcelFile(query); // FileInfo
    var fileStream = file.OpenRead();
    return File(fileStream, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", query.FileName);
}