Response.BinaryWrite () вызывает повреждение файла - PullRequest
0 голосов
/ 12 октября 2018

При записи файла в HttpResponse файл поврежден.Файлы, которые я пишу, сохраняются на диск до записи.Я проверил, что сгенерированный / сохраненный файл в порядке, это только при записи в ответ.Я протестировал несколько типов файлов (text и excel) и получил ту же проблему.При использовании 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();
...