c# - ¿Es posible utilizar un MemoryStream con FileStreamResult?
asp.net-mvc dotnetzip (1)
Estoy usando DotNetZip para crear un archivo zip y pasarlo a un FileResult. En la depuración, puedo verificar que MemoryStream contiene un archivo, pero cuando lo ejecuto a través de FileStreamResult, devuelve 0bytes:
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;
}
De nuevo, puedo verificar que la secuencia no esté vacía, pero esto siempre devolverá el archivo hey.zip
como 0bytes. Debo estar usando MemoryStream
mal aquí? ¿O FileStreamResult
hace algo que no espero que haga? He usado FileStreamResult
antes, pero no con MemoryStream
.
¿Has intentado configurar stream.Position = 0;
Después de hacer el zip.Save(stream)
?
Además, puede confirmar que los datos se están escribiendo en la secuencia. Compruebe stream.Length
después de zip.Save
. Si stream.Length
es cero, entonces no se está escribiendo nada.