2010-09-13 4 views
18

Ich verwende DotNetZip, um eine Zip-Datei zu erstellen und sie an ein FileResult zu übergeben. Auf debug, kann ich überprüfen, ob die Memory eine Datei enthält, aber wenn ich es durch Filestreamresult laufen, es gibt 0Bytes:Verwendung eines MemoryStreams mit FileStreamResult möglich?

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; 
} 

Auch hier kann ich sicherstellen, dass Strom nicht leer ist, aber das wird immer wieder zurückkehren, die Datei hey.zip als 0bytes. Ich muss MemoryStream falsch hier verwenden? Oder FileStreamResult tut etwas, was ich nicht erwarte es zu tun? Ich habe FileStreamResult vorher verwendet, aber nicht mit MemoryStream.

Antwort

45

Haben Sie die Einstellung stream.Position = 0; versucht, nachdem Sie die zip.Save(stream) tun?

Sie können auch bestätigen, dass Daten tatsächlich in den Stream geschrieben werden. Überprüfen Sie stream.Length nach zip.Save. Wenn stream.Length Null ist, dann wird nichts geschrieben.

+0

+1 für den ersten Satz, -1 für die zweite, weil er bereits gesehen hat, ist es nicht im Debugger leer. –

+0

@Joel: Ich denke, ich habe das verpasst. –

+0

kein biggie, ich gab dir trotzdem die plus vote –

Verwandte Themen