ASP.NET将所有文件下载为Zip

Ron*_*rby 7 .net c# asp.net zip

我的网络服务器上有一个文件夹,里面有数百个mp3文件.我想为用户提供从网页下载目录中每个mp3的压缩存档的选项.

我想只在需要时以编程方式压缩文件.因为zip文件会非常大,所以我认为出于性能原因,我需要将zip文件发送到压缩响应流.

这可能吗?我该怎么做?

Ray*_*Ray 9

以下是我使用DotNetZip执行此操作的代码 - 效果非常好.显然,您需要为outputFileName,folderName和includeSubFolders提供变量.

response.ContentType = "application/zip";
response.AddHeader("content-disposition", "attachment; filename=" + outputFileName);
using (ZipFile zipfile = new ZipFile()) {
  zipfile.AddSelectedFiles("*.*", folderName, includeSubFolders);
  zipfile.Save(response.OutputStream);
}
Run Code Online (Sandbox Code Playgroud)

  • 如果您不希望Zip存档中的目录子树,只需使用方法重载zipfile.AddSelectedFiles(“ *。*”,folderName,direcotryInZip,includeSubFolders);` (2认同)
  • 这里的反应是什么?它表示上下文中不存在响应。尝试了 WebResponse、HttpResponse,不起作用 (2认同)

Ron*_*rby 7

我不敢相信这是多么容易.阅读本文后,这是我使用的代码:

protected void Page_Load(object sender, EventArgs e)
{
    Response.Clear();
    Response.BufferOutput = false;
    Response.ContentType = "application/zip";
    Response.AddHeader("content-disposition", "attachment; filename=pauls_chapel_audio.zip");

    using (ZipFile zip = new ZipFile())
    {
        zip.CompressionLevel = CompressionLevel.None;
        zip.AddSelectedFiles("*.mp3", Server.MapPath("~/content/audio/"), "", false);
        zip.Save(Response.OutputStream);
    }

    Response.Close();
}
Run Code Online (Sandbox Code Playgroud)

  • @BimalDas那是因为我回答中的ZipFile类来自DotNetZip库。您正在参考“ System.IO.Compression.ZipFile”。 (3认同)