在c#中将多个文件添加到内存zip存档中

时间:2015-01-25 09:45:30

标签: c# asp.net

我试图在.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();

我还没能在网上找到很多例子,因此模糊不清。

1 个答案:

答案 0 :(得分:3)

永远不会写入fileStream,因为它与存档无关。

因此档案正在写入memoryStream

BinaryWrite只接受byte[],因此请使用memoryStream.ToArray()

此外,Response.ContentType值错误。