скачать несколько файлов в формате ZIP в .net - PullRequest
9 голосов
/ 21 октября 2010

У меня есть список файлов с флажком для каждого файла, если пользователь проверяет много файлов и нажимает кнопку загрузки, мне нужно сжать все эти файлы и загрузить их ... как в почтовых вложениях ..

iИспользовал код, упомянутый в этом посте для загрузки одного файла

Пожалуйста, помогите, как загрузить несколько файлов в формате zip.

Ответы [ 4 ]

25 голосов
/ 21 октября 2010

Вам необходимо упаковать файлы и записать результат в ответ.Вы можете использовать SharpZipLib библиотека сжатия.

Пример кода:

Response.AddHeader("Content-Disposition", "attachment; filename=" + compressedFileName + ".zip");
Response.ContentType = "application/zip";

using (var zipStream = new ZipOutputStream(Response.OutputStream))
{
    foreach (string filePath in filePaths)
    {
        byte[] fileBytes = System.IO.File.ReadAllBytes(filePath);

        var fileEntry = new ZipEntry(Path.GetFileName(filePath))
        {
            Size = fileBytes.Length
        };

        zipStream.PutNextEntry(fileEntry);
        zipStream.Write(fileBytes, 0, fileBytes.Length);
    }

    zipStream.Flush();
    zipStream.Close();
}
4 голосов
/ 21 октября 2010

Вот как это сделать способом DotNetZip: я ручаюсь за DotNetZip, потому что я его использовал, и это, безусловно, самая простая библиотека сжатия для C #, с которой я сталкивался:)

Проверка http://dotnetzip.codeplex.com/

http://dotnetzip.codeplex.com/wikipage?title=CS-Examples&referringTitle=Examples

Создание загружаемого почтового индекса в ASP.NET.В этом примере динамически создается zip-файл в методе обратной передачи ASP.NET, а затем загружается этот zip-файл в запрашивающий браузер через Response.OutputStream.На диске никогда не создается zip-архив.

public void btnGo_Click (Object sender, EventArgs e)
{
  Response.Clear();
  Response.BufferOutput= false;  // for large files
  String ReadmeText= "This is a zip file dynamically generated at " + System.DateTime.Now.ToString("G");
  string filename = System.IO.Path.GetFileName(ListOfFiles.SelectedItem.Text) + ".zip";
  Response.ContentType = "application/zip";
  Response.AddHeader("content-disposition", "filename=" + filename);

  using (ZipFile zip = new ZipFile()) 
  {
    zip.AddFile(ListOfFiles.SelectedItem.Text, "files");
    zip.AddEntry("Readme.txt", "", ReadmeText);
    zip.Save(Response.OutputStream);
  }
  Response.Close();
}
1 голос
/ 21 октября 2010

Создайте ZIP-файл на лету, используя http://www.icsharpcode.net/opensource/sharpziplib/.

0 голосов
/ 21 октября 2010

3 библиотеки, которые я знаю, это SharpZipLib (универсальные форматы), DotNetZip (все ZIP) и ZipStorer (маленький и компактный). Нет ссылок, но они все на codeplex и найдены через Google. Лицензии и точные функции различаются.

Удачного кодирования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...