2012-01-31 8 views
5

ho la seguente azione dentro il mio controllerASP.net MVC ActionResult danneggia il file Excel quando di ritorno da 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");   
     } 

Quando si apre il file, viene visualizzato il messaggio di Excel dice che il file non corrisponde alla estensione e il file si apre danneggiato.

Se risparmio il file sul disco rigido e ritorno da lì, tutto va bene:

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

ho inizialmente pensato che la funzione Salva corrompe quando salvandolo nella MemoryStream, quindi ho salvato e ricaricato di nuovo ed è stato bene tornare all'utente - quando salvato sul disco rigido e restituito da lì, piuttosto che dal MemoryStream

Qualche idea? Non mi piace molto salvare il file sul disco rigido .... inoltre dovrei essere in grado di salvarlo nel MemoryStream e restituirlo da lì?

Un sospetto è che forse MemoryStream non deve essere utilizzato per restituire file in MVC, poiché ogni richiesta è isolata?

risposta

5

Forse è necessario riavvolgere il flusso di memoria (impostare ms.Position = 0;) prima di passarlo al risultato? Dopo la chiamata a Save la sua posizione sarà alla fine, non l'inizio.

+0

grazie! era così! – sarsnake

Problemi correlati