可以使用MemoryStream和FileStreamResult吗?

chu*_*nce 21 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;
 }
Run Code Online (Sandbox Code Playgroud)

同样,我可以验证流不是空的,但这将始终将文件返回hey.zip为0bytes.我一定在MemoryStream这里用错了?或者FileStreamResult做一些我不希望它做的事情?我以前用过FileStreamResult,但没用过MemoryStream.

Jim*_*hel 49

你stream.Position = 0;做完之后尝试过设置zip.Save(stream)吗?

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

  • 第一句为 +1,第二句为 -1,因为他已经在调试器中看到它不是空的。 (3认同)