ASP.net MVC ActionResult повреждает файл Excel при возврате из MemoryStream - PullRequest
5 голосов
/ 31 января 2012

У меня в контроллере следующее действие

public ActionResult DownloadExcel()
        {
            //create and populate Excel file here
            C1XLBook testBook = new C1XLBook(); 
            //populate it here

            MemoryStream ms = new MemoryStream();
            testBook.Save(ms, FileFormat.Biff8);

            return File(ms, "application/ms-excel", "test-file.xls");           
        }

При открытии файла я получаю сообщение Excel о том, что файл не соответствует расширению и файл открывается поврежденным.

Если я сохраню файл на жестком диске и верну его оттуда, все в порядке:

return base.File(@"C:\LOGS\test-file.xls", "application/ms-excel", "test-excel.xls");

Сначала я подумал, что функция «Сохранить» повреждает его при сохранении в MemoryStream, поэтому я сохранили снова загрузил его, и это было нормально, передавая обратно пользователю - когда он был сохранен на жестком диске и возвращен оттуда, а не из MemoryStream

Есть идеи?Я не слишком люблю сохранять файл на жестком диске .... кроме того, я должен быть в состоянии сохранить его в MemoryStream и вернуть его оттуда?

Один у меня есть предположение, что возможно MemoryStream долженне будет использоваться для возврата файлов в MVC, так как каждый запрос изолирован?

1 Ответ

5 голосов
/ 31 января 2012

Возможно, вам нужно перемотать поток памяти (установить ms.Position = 0;) перед передачей его результату?После вызова Save его позиция будет в конце, а не в начале.

...