如何下载多个文件?获取“发送 HTTP 标头后服务器无法清除标头”
本文关键字:HTTP 发送 服务器 清除 获取 下载 何下载 文件 | 更新日期: 2023-09-27 18:37:03
我有一个MVC应用程序,显示要下载的文件列表。 用户使用复选框选择文件,这些文件使用Pechkin库在服务器端生成为PDF。
我的问题是,在下载多个文件时,我收到"发送HTTP标头后服务器无法清除标头"的错误,我意识到这是因为我只能将单个HTTP响应发送回客户端,但我不确定如何解决这个问题。
public ActionResult Forms(FormsViewModel model)
{
foreach (var item in model.Forms)
{
if (item.Selected)
{
CreatePdfPechkin(RenderRazorViewToString(model.FormType, model.Form), model.Name);
}
}
return View(model);
}
private void CreatePdfPechkin(string html, string filename)
{
var pechkin = Factory.Create(new GlobalConfig());
var pdf = pechkin.Convert(new ObjectConfig()
.SetLoadImages(true).SetZoomFactor(1.1)
.SetPrintBackground(true)
.SetScreenMediaType(true)
.SetCreateExternalLinks(true), html);
Response.Clear();
Response.ClearContent();
// error on the next line for the second file to be downloaded
Response.ClearHeaders();
Response.ContentType = "application/pdf";
Response.AddHeader("Content-Disposition", string.Format("attachment;filename={0}.pdf; size={1}", filename, pdf.Length));
Response.BinaryWrite(pdf);
Response.Flush();
Response.End();
}
我应该使用什么模式来完成此操作?
您可以压缩所有选定的文件并将其发送。在名为DotNetZip的codeplex上也有可用的库这就是您可以压缩它的方式。
var outputStream = new MemoryStream();
using (var zip = new ZipFile())
{
zip.AddFile("path to file one");
zip.AddFile("path to file two");
zip.AddFile("path to file three");
zip.AddFile("path to file four");
zip.Save(outputStream);
}
outputStream.Position = 0;
return File(outputStream, "application/zip","zip file name.zip");