我正在使用dotnetzip来创建zip文件,然后将其传递给文件。在调试中,我可以验证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.

有帮助吗?

解决方案

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

另外,您可能会确认数据实际上已写入流。查看 stream.Lengthzip.Save. 。如果 stream.Length 为零,然后什么也没有写。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top