可以使用MemoryStream和FileStreamResult吗?

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

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

你试过设置stream.Position = 0; 在你执行zip.Save(stream)

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