ASP.NET MVC FileResult正在破坏文件

我一直试图让我的ASP.NET MVC网站导出一些数据作为Excel文件。 几个小时后,我以为NPOI只是在生产垃圾,所以我转到了EPPlus。 我在LINQPad中testing了它,并创build了一个正常的XLSX文件,所以我将代码移到了MVC应用程序中。 再次,我得到损坏的文件。 偶然碰巧看临时目录,看到由EPPlus创build的文件是3.87KB,完美的工作,但FileResult返回一个FileResult的文件,这是损坏的。 为什么发生这种情况? 我读了一个地方,这是服务器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); } 

就我而言, FileResult和它的伴随方法有一个问题。 我最终通过覆盖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(); } 

尝试使用FileInfoOpenRead来获取文件stream,看看是否有效。

 [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); }