可以使用MemoryStream和FileStreamResult吗?

时间:2010-09-13 16:35:53

标签: c# asp.net-mvc dotnetzip

我正在使用DotNetZip创建一个zip文件并将其传递给FileResult。在调试时,我可以验证MemoryStream是否包含一个文件,但是当我通过FileStreamResult运行它时,它返回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;
 }

同样,我可以验证流是否为空,但这将始终将文件hey.zip返回为0bytes。我必须在这里使用MemoryStream错误吗?或FileStreamResult做了一些我不希望它做的事情?我之前使用过FileStreamResult,但未使用MemoryStream

1 个答案:

答案 0 :(得分:49)

您是否尝试在stream.Position = 0;后设置zip.Save(stream)

此外,您可能确认数据实际上正在写入流。在stream.Length之后检查zip.Save。如果stream.Length为零,则不会写任何内容。