2012-01-31 2 views
5

У меня есть следующие действия внутри моего контроллераASP.net MVC ActionResult развращает файл первенствовать при возвращении из MemoryStream

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"); 

Первоначально я думал, что функция Save разлагает его при сохранении его в MemoryStream, так что я спасен и перезагрузили его обратно, и он был прекрасным передачей обратно пользователю - при сохранении на жестком диске и возврате оттуда, а не из MemoryStream

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

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

ответ

5

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

+0

спасибо! вот и все! – sarsnake

Смежные вопросы