25

我正在使用 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为 0 字节。我一定是在这里用MemoryStream错了?或者FileStreamResult做一些我不希望它做的事情?我以前用过FileStreamResult,但没有MemoryStream

4

1 回答 1

54

stream.Position = 0;做完之后有没有试过设置zip.Save(stream)

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

于 2010-09-13T17:00:16.947 回答