ASP.NET скачать все файлы в формате Zip - PullRequest
6 голосов
/ 19 апреля 2010

На моем веб-сервере есть папка с сотнями mp3-файлов. Я хотел бы предоставить пользователю возможность загружать архивный архив каждого mp3-файла в каталоге с веб-страницы.

Я хочу сжимать файлы программно только при необходимости. Поскольку zip-файл будет довольно большим, я думаю, что мне нужно будет отправить zip-файл в поток ответов по мере его сжатия , из соображений производительности.

Возможно ли это? Как я могу это сделать?

Ответы [ 4 ]

8 голосов
/ 19 апреля 2010

Вот код, который я использую для этого с 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);
}
6 голосов
/ 19 апреля 2010

Я не могу поверить, как легко это было. После прочтения 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();
}
1 голос
/ 19 апреля 2010

Вы можете добавить пользовательский обработчик (файл .ashx), который принимает путь к файлу, читает файл, сжимает его, используя библиотеку сжатия, и возвращает байты конечному пользователю с правильным типом содержимого.

0 голосов
/ 30 апреля 2013
            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();
...