2010-09-13 21 views
18

Uso DotNetZip per creare un file zip e passarlo a FileResult. Su di debug, posso verificare che il MemoryStream contiene un file, ma quando l'eseguo attraverso FileStreamResult, restituisce 0bytes:È possibile utilizzare un MemoryStream con FileStreamResult?

public FileResult GetZipFiles(int documentId) { 
     var file = fileRepository.Get(documentId); 
     var zip = new ZipFile(); 
     var stream = new MemoryStream(); 

     var filePath = Path.Combine(UploadsFolder, Path.GetFileName(file.Id)); 

     zip.AddFile(filePath); 
     zip.Save(stream); 

     var result = new FileStreamResult(stream, "application/zip") 
        { FileDownloadName = "hey.zip" }; 

     return result; 
} 

Anche in questo caso, è possibile verificare se Stream non è vuota, ma questo sarà sempre restituire il file hey.zip come 0 byte. Devo usare MemoryStream sbagliato qui? O FileStreamResult fa qualcosa che non mi aspetto che faccia? Ho usato FileStreamResult prima, ma non con MemoryStream.

risposta

45

Hai provato a impostare stream.Position = 0; dopo aver eseguito il zip.Save(stream)?

Inoltre, è possibile confermare che i dati vengano effettivamente scritti nello stream. Controllare stream.Length dopo zip.Save. Se stream.Length è zero, non viene scritto nulla.

+0

+1 per la prima frase, -1 per il secondo perché ha già visto che non è vuoto nel debugger. –

+0

@Joel: Suppongo di averne perso uno. –

+0

no biggie, comunque ti ho dato il voto più –

Problemi correlati