tags:

views:

51

answers:

4

i have a file list with check box for each files , if the user checks many files and click download i have to zip all those files and download it... like in mails attachments..

i have used the code mention in this post for single file download

pls help how to download multiple files as zip..

+1  A: 

Create a ZIP file on the fly using http://www.icsharpcode.net/opensource/sharpziplib/.

Pieter
is it possible to create in rar format,,,
deepu
+1 your answer is exactly what I'm going to say.
Danny Chen
@deepu you will probably have to use rar.exe create a rar-file.
Fedearne
This threads has some information concerning RAR: http://stackoverflow.com/questions/1025863/read-content-of-rar-files-using-c.
Pieter
+3  A: 

You need to pack files and write a result to a response. You can use SharpZipLib compression library.

Code example:

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();
}
bniwredyc
A: 

The 3 libraries I know of are SharpZipLib (versatile formats), DotNetZip (everything ZIP), and ZipStorer (small and compact). No links, but they are all on codeplex and found via google. The licenses and exact features vary.

Happy coding.

pst
A: 

This is how to do it the DotNetZip way :D I vouch for DotNetZip because I have used it and it is by far the easiest compression library for C# I've come across :)

Check http://dotnetzip.codeplex.com/

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

Create a downloadable zip within ASP.NET. This example creates a zip dynamically within an ASP.NET postback method, then downloads that zipfile to the requesting browser through Response.OutputStream. No zip archive is ever created on disk.

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();
}
Ranhiru Cooray