C# 在内存中创建ZipArchive,然后下载到客户端
我已经读了好几篇关于这个的博客文章和问题,但是我不能让它工作。它只是下载一个损坏的ZIP存档文件,如果你在其中设置断点,C# 在内存中创建ZipArchive,然后下载到客户端,c#,http,zip,C#,Http,Zip,我已经读了好几篇关于这个的博客文章和问题,但是我不能让它工作。它只是下载一个损坏的ZIP存档文件,如果你在其中设置断点,字节的长度是多少?添加内容长度标题也可能有帮助。那么,如果您只返回PDF文件(暂时忽略压缩),会发生什么呢,我在没有开发工具的情况下远程处理这个问题,所以调试是一个巨大的痛苦:p我相信我在项目开始时成功地测试了PDF部分,但我会再试一次。 using (var outStream = new MemoryStream()) { using
字节的长度是多少?添加内容长度
标题也可能有帮助。那么,如果您只返回PDF文件(暂时忽略压缩),会发生什么呢,我在没有开发工具的情况下远程处理这个问题,所以调试是一个巨大的痛苦:p我相信我在项目开始时成功地测试了PDF部分,但我会再试一次。
using (var outStream = new MemoryStream())
{
using (ZipArchive archive = new ZipArchive(outStream, ZipArchiveMode.Create, true))
{
foreach (string Item in Items)
{
ReportParameter[] prms = new ReportParameter[1];
prms[0] = new ReportParameter("Item", Item, false);
rv.ServerReport.SetParameters(prms);
rv.ShowParameterPrompts = false;
rv.ServerReport.Refresh();
byte[] bytes = rv.ServerReport.Render("PDF", null, out mimeType, out encoding, out extension, out streamids, out warnings);
string fileName = Item + ".pdf";
var fileInArchive = archive.CreateEntry(fileName);
using (var entryStream = fileInArchive.Open())
using (var fileToCompressStream = new MemoryStream(bytes))
{
fileToCompressStream.CopyTo(entryStream);
}
}
}
outStream.Position = 0;
Response.ClearContent();
Response.ClearHeaders();
Response.AppendHeader("content-disposition", "attachment; filename=PDFReports_" + DateTime.Now.ToString("yyyyMMddhhmmss") + ".zip");
Response.Write(outStream);
}