代码之家  ›  专栏  ›  技术社区  ›  Ronnie Overby

asp.net以zip格式下载所有文件

  •  6
  • Ronnie Overby  · 技术社区  · 14 年前

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

    我只想在需要时以编程方式压缩文件。因为zip文件将非常大,所以我认为需要将zip文件发送到响应流 因为它被拉上了拉链 ,因为性能原因。

    这可能吗?我该怎么做?

    4 回复  |  直到 14 年前
        1
  •  8
  •   Ray    14 年前

    下面是我用来处理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);
    }
    
        2
  •  5
  •   Community WizardZ    7 年前

    我真不敢相信这有多容易。阅读后 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();
    }
    
        3
  •  1
  •   vfilby    14 年前

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

        4
  •  0
  •   Saiyam    11 年前
                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();