我试图在.NET 4.5中使用Zip Archive库在一堆byte []附件的内存中创建一个.zip文件:
using (var memoryStream = new MemoryStream())
{
using (var archive = new ZipArchive(memoryStream, ZipArchiveMode.Create, true))
{
string zipFilename = string.Format(@"c:\temp\{0} - {1}.zip",
"test",
System.DateTime.Now.ToString("yyyyMMddHHmm"));
using (var fileStream = new FileStream(zipFilename, FileMode.Create))
{
foreach (var attachment in attachments)
{
ZipArchiveEntry entry = archive.CreateEntry(attachment.FileName);
using (Stream ZipFile = entry.Open())
{
byte[] data = attachment.Data;
ZipFile.Write(data, 0, data.Length);
}
}
}
}
}
PdfAttachment是一个带有byte []数据和字符串文件名的类。
我的问题是双重的。一旦,zip存档为空。 2,而不是将其保存到文件中,我想使用响应输出在用户浏览器中下载文件,我尝试过:
Response.Clear();
Response.ClearContent();
Response.ClearHeaders();
Response.ContentType = "application/pdf";
Response.AddHeader("Content-Disposition", string.Format("attachment;filename={0}.zip; size={1}", "test.zip", memoryStream.Length));
Response.BinaryWrite(memoryStream);
Response.Flush();
Response.End();
我还没能在网上找到很多例子,因此模糊不清。
答案 0 :(得分:3)
永远不会写入fileStream
,因为它与存档无关。
因此档案正在写入memoryStream
。
BinaryWrite
只接受byte[]
,因此请使用memoryStream.ToArray()
。
此外,Response.ContentType
值错误。