Объекты потока памяти не сохраняются в DotNetZip
Я пытаюсь создать почтовый файл DotNetZip, который будет передаваться пользователю. Внутри 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-файл. Мне нужно знать, почему эти потоки не добавляются. Бесконечно благодарен!
1 ответ
Ок... нашел ответ сам....
Так что, как оказалось, не только
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);
незадолго до вызова вернуть файл все работало нормально.