c# - 可以将 MemoryStream 与 FileStreamResult 一起使用吗?

标签 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;
 }

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

最佳答案

您是否尝试过在执行 zip.Save(stream) 之后设置 stream.Position = 0;

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

关于c# - 可以将 MemoryStream 与 FileStreamResult 一起使用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3702448/

相关文章:

c# - 如何跟踪上次对DDD中的对象进行更改的用户?

c# - 如何删除/释放 Roslyn 发出的 .dll 程序集

asp.net-mvc - 内联如果在Razor View 中

asp.net-mvc - 创建动态 blob 容器名称

c# - 删除应用程序的 DLL 依赖项

asp.net - 目前不支持超过 65534 个段的跨区归档

c# - 如何制作固定的十六进制编辑器?

c# - 无法启动您的应用程序 工作组信息文件不存在或已被其他用户独占打开

asp.net MVC 解决方案/项目布局