可以在FileStreamResult中使用MemoryStream吗?

25

我正在使用DotNetZip创建一个zip文件并将其传递给FileResult。在调试时,我可以验证MemoryStream中包含一个文件,但是当我通过FileStreamResult运行它时,它返回0字节:

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

1个回答

55

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

此外,您可以确认数据是否实际写入了流中。检查zip.Save之后的stream.Length。如果stream.Length为零,则没有写入任何内容。


3
+1 对于第一句话,-1 对于第二句话,因为他已经在调试器中看到它不是空的。 - Joel Coehoorn
1
@Joel:猜我错过了那个。 - Jim Mischel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接