可以使用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
为零,则没有任何内容被写入。