2010-04-19 3 views
6

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

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

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

+0

После того, как вы получите ответ, не забудьте отключить сжатие при добавлении файлов в почтовый файл ... мр3 файлы DonT сжать очень хорошо .... – 2010-04-19 19:42:54

+0

Конечно, потому что они уже сжаты , Спасибо за напоминание. –

ответ

7

Вот код я использую, чтобы сделать это с 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

В случае, если вы не хотите, чтобы ваше поддерево каталога находилось в Zip-архиве, просто используйте метод overload 'zipfile.AddSelectedFiles (" *. * ", FolderName, directcotryInZip, includeSubFolders);' – marquito

+0

@marquito На самом деле, я думаю, что принятый ответ был бы лучше, если бы он использовал эту перегрузку. – stephen

+0

эй Рэй, мне нужна небольшая помощь, связанная с созданием zip-файлов. ЕСЛИ вы можете помочь. дайте мне знать здесь. Было бы приятно :) Спасибо – BNN

1

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

4

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