首页 > 解决方案 > Response.BinaryWrite() 导致文件损坏

问题描述

将文件写入文件时,HttpResponse文件已损坏。我正在写入的文件会在写入之前保存到光盘中。我已经测试过生成/保存的文件很好,只有在写入响应时。我已经使用多种文件类型(textexcel)进行了测试,并收到了同样的问题。使用 excel ( openXML) 时,文件会在 Excel 修复后打开。通过记事本查看内容时文件中的错误是:

System.Threading.ThreadAbortException:线程被中止。在 System.Threading.Thread.AbortInternal() 在 System.Threading.Thread.Abort(Object stateInfo) 在 System.Web.HttpResponse.AbortCurrentThread() 在 SPAM.WEB.Reports.Wrapper.LaunchQuarterlyReportDownload() 在 C:\Use。 ......

我用来编写文件的代码是:

string fileDownloadPath = GetConfigValue("FileUploadPath");
string filePath = fileDownloadPath + BUSINESS.Business.QuarterlyAuditReport.getRecentQuarter() + ".xlsx";
BUSINESS.Business.QuarterlyAuditReport.GetSpreadSheet(filePath);
FileInfo fileInfo = new FileInfo(filePath);

MemoryStream memStream = new MemoryStream();
File.Open(filePath, FileMode.Open).CopyTo(memStream);
HttpContext.Current.Response.Buffer = true;
HttpContext.Current.Response.Clear();
HttpContext.Current.Response.ContentType = @"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml";
HttpContext.Current.Response.AddHeader("content-disposition", "attachment; filename=" + fileInfo.Name);
HttpContext.Current.Response.BinaryWrite(memStream.GetBuffer());            
memStream.Dispose();
HttpContext.Current.Response.Flush();
HttpContext.Current.Response.End();

标签: c#asp.netdownloadhttpresponsebinarywriter

解决方案


推荐阅读