Загрузка ASP.NET все файлы как Zip

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

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

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

7
задан Ronnie Overby 19 April 2010 в 19:37
поделиться

3 ответа

Вот код, который я использую для этого с 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);
}
9
ответ дан 6 December 2019 в 09:59
поделиться

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

2
ответ дан 6 December 2019 в 09:59
поделиться

Не могу поверить, насколько это было легко. После прочтения этого , вот код, который я использовал:

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();
}
7
ответ дан 6 December 2019 в 09:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: