我一直试图让我的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);
}
答案 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);
}