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

时间:2010-04-19 19:37:31

标签: c# .net asp.net zip

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

我想仅在需要时以编程方式压缩文件。由于zip文件非常大,我认为出于性能原因,我需要将zip文件发送到响应流,因为它正在压缩

这可能吗?我该怎么办?

4 个答案:

答案 0 :(得分:8)

以下是我使用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);
}

答案 1 :(得分:6)

我无法相信这是多么容易。阅读this后,这是我使用的代码:

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();
}

答案 2 :(得分:1)

您可以添加一个采用文件路径的自定义处理程序(.ashx文件),读取文件使用压缩库对其进行压缩,然后使用正确的内容类型将字节返回给最终用户。

答案 3 :(得分:0)

            foreach (GridViewRow gvrow in grdUSPS.Rows)
            {
                  CheckBox chk = (CheckBox)gvrow.FindControl("chkSelect");
                if (chk.Checked)
                {
                string fileName = gvrow.Cells[1].Text;

                string filePath = Server.MapPathfilename);
                zip.AddFile(filePath, "files");
                }
            }
            Response.Clear();
            Response.AddHeader("Content-Disposition", "attachment; filename=DownloadedFile.zip");
            Response.ContentType = "application/zip";
            zip.Save(Response.OutputStream);
            Response.End();