2012-01-31 21 views
5

tengo la siguiente acción dentro de mi controladorASP.net MVC ActionResult corrompe el archivo de Excel, al regresar de 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");   
     } 

Al abrir el archivo, me sale el mensaje de Excel indica que el archivo no coincide con el extensión y el archivo se abre dañado.

Si salvo el archivo en el disco duro y volverlo a partir de ahí, todo está bien:

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

Al principio pensé que la función Save corrompe al guardarlo en el MemoryStream, así que salven y volvió a cargarlo y estaba bien, volviendo al usuario: cuando se guardó en el disco duro y volvió desde allí, en lugar de desde MemoryStream

¿Alguna idea? No me gusta guardar el archivo en el Disco Duro ... además, ¿podría guardarlo en el MemoryStream y devolverlo desde allí?

Una corazonada que tengo es que tal vez el MemoryStream no se debe usar para devolver archivos en MVC, ya que cada solicitud está aislada.

Respuesta

5

Quizás necesite rebobinar el flujo de memoria (configure ms.Position = 0;) antes de pasarlo al resultado? Después de la llamada al Save su posición será al final, no al principio.

+0

gracias! ¡eso fue todo! – sarsnake

Cuestiones relacionadas