gpt4 book ai didi

c# - 内存流对象未保存到 DotNetZip

转载 作者:行者123 更新时间:2023-11-30 14:29:46 30 4
gpt4 key购买 nike

我正在尝试创建一个将流式传输给用户的 DotNetZip zip 文件。在 zip 文件中,我插入了两个内存流。但是由于某种原因,当我打开 zip 文件时,它是空的。我查看了文档,发现几乎没有帮助。我的代码:

public async Task<FileResult> DownloadFile(string fileName){

//Create image memory stream
System.Drawing.Image image = System.Drawing.Image.FromFile(Server.MapPath("~/Images/" + fileName));
MemoryStream msImage = new MemoryStream();
image.Save(msImage, image.RawFormat);

//Create Word document using DocX
MemoryStream msDoc = new MemoryStream();
DocX doc = DocX.Create(msDoc);
Paragraph p1 = doc.InsertParagraph();
p1.AppendLine("Text information...");
Paragraph p2 = doc.InsertParagraph();
p2.AppendLine("DISCLAIMER: ...");
doc.SaveAs(msDoc);

//Create Zip File and stream it to the user
MemoryStream msZip = new MemoryStream();
ZipFile zip = new ZipFile();
msImage.Seek(0, SeekOrigin.Begin);
msDoc.Seek(0, SeekOrigin.Begin);
ZipEntry imageEntry = zip.AddEntry("MyImageName.jpg", msImage);
ZipEntry docEntry = zip.AddEntry("MyWordDocName.docx", msDoc);
zip.Save(msZip);

image.Dispose();
doc.Dispose();
zip.Dispose();

return File(msZip, System.Net.Mime.MediaTypeNames.Application.Octet, "MyZipFileName.zip");
}

我检查了 msImage 和 msDoc 的大小,它们都加载了数据,但 msZip 显示的大小非常小。更不用说当它下载时,它是一个空的 zip 文件。我需要知道为什么没有添加这些流。一百万!

最佳答案

好的......我自己找到了答案......

事实证明,不仅如此

ZipEntry imageEntry = zip.AddEntry("MyImageName.jpg", msImage);
ZipEntry docEntry = zip.AddEntry("MyWordDocName.docx", msDoc);

要求将msImage和msDoc设置回0位置,

return File(msZip, System.Net.Mime.MediaTypeNames.Application.Octet, "MyZipFileName.zip");

还要求将 msZip 设置为 0 位置。所以通过添加

msZip.Seek(0, SeekOrigin.Begin);

就在调用返回文件之前,一切正常。

关于c# - 内存流对象未保存到 DotNetZip,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25193115/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com