我使用DotNetZip创建一个带有内存字符串的zip存档,并使用以下代码将其下载为附件.
- byte[] formXml = UTF8Encoding.Default.GetBytes("<form><pkg>Test1</pkg></form>");
- byte[] formHtml = UTF8Encoding.Default.GetBytes("<html><body>Test2</body></html>");
- ZipFile zipFile = new ZipFile();
- zipFile.AddEntry("Form.xml",formXml);
- zipFile.AddEntry("Form.html",formHtml);
- Response.ClearContent();
- Response.ClearHeaders();
- Response.AppendHeader("content-disposition","attachment; filename=FormsPackage.zip");
- zipFile.Save(Response.OutputStream);
- zipFile.Dispose();
解决方法
试试以下
- MemoryStream msFormXml = new MemoryStream(UTF8Encoding.Default.GetBytes("<form><pkg>Test1</pkg></form>"));
- MemoryStream msFormHTML = new MemoryStream(UTF8Encoding.Default.GetBytes("<html><body>Test2</body></html>"));
- MemoryStream outputMemStream = new MemoryStream();
- ZipOutputStream zipStream = new ZipOutputStream(outputMemStream);
- zipStream.SetLevel(3); //0-9,9 being the highest level of compression
- ZipEntry xmlEntry = new ZipEntry("Form.xml");
- xmlEntry.DateTime = DateTime.Now;
- zipStream.PutNextEntry(xmlEntry);
- StreamUtils.Copy(msFormXml,zipStream,new byte[4096]);
- zipStream.CloseEntry();
- ZipEntry htmlEntry = new ZipEntry("Form.html");
- htmlEntry.DateTime = DateTime.Now;
- zipStream.PutNextEntry(htmlEntry);
- StreamUtils.Copy(msFormHTML,new byte[4096]);
- zipStream.CloseEntry();
- zipStream.IsStreamOwner = false;
- zipStream.Close();
- outputMemStream.Position = 0;
- byte[] byteArray = outputMemStream.ToArray();
- Response.Clear();
- Response.AppendHeader("Content-Disposition","attachment; filename=FormsPackage.zip");
- Response.AppendHeader("Content-Length",byteArray.Length.ToString());
- Response.ContentType = "application/octet-stream";
- Response.BinaryWrite(byteArray);