У меня есть папка на моем веб-сервере, который имеет сотни mp3 файлов в ней. Я хотел бы предоставить возможность для пользователя загружать заархивированный архив каждого mp3 в каталоге от веб-страницы.
Я хочу сжать файлы программно только при необходимости. Поскольку zip-файл будет довольно большим, я думаю, что должен буду отправить zip-файл в ответный поток, поскольку он заархивирован по причинам производительности.
Действительно ли это возможно? Как я могу сделать это?
Вот код, который я использую для этого с 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);
}
Вы можете добавить собственный обработчик (файл .ashx), который принимает путь к файлу, читает файл, сжимает его с помощью библиотеки сжатия и возвращает байты конечному пользователю с правильным типом содержимого.
Не могу поверить, насколько это было легко. После прочтения этого , вот код, который я использовал:
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();
}