2010-10-21 54 views
8

tengo una lista de archivos con la casilla de verificación para cada archivo, si el usuario comprueba muchos archivos y hace clic en descargar tengo que comprimir todos esos archivos y descargarlo ... como en los archivos adjuntos. .descarga varios archivos como zip en .net

he utilizado la mención de código de este post for single file download

pls ayuda descargar varios archivos como zip ..

Respuesta

22

Debe empaquetar los archivos y escribir el resultado de la respuesta. Puede usar la biblioteca de compresión SharpZipLib.

ejemplo Código:

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(); 
} 
+0

Eso es genial ... bien merecedor de un voto positivo. ¿Sabes si hay alguna forma de conocer el tamaño comprimido en tiempo real? Quiero poder decirle a mis usuarios el tamaño de lo que descargarán si están comprimidos. – pearcewg

+1

@pearcewg, creo que en este caso la solución depende de su requerimiento. Si sabe cuál será el contenido de los archivos, puede comprimir los archivos antes de la generación de la página y simplemente mostrar el tamaño de los archivos. Si el contenido de los archivos puede variar, entonces es una tarea no trivial. Mis pensamientos son: 1. poner información sobre el tamaño de los archivos comprimidos en la base de datos 2. mostrar el tamaño aproximado de los archivos comprimidos según las estadísticas de compresión. – bniwredyc

+0

funcionan como un encanto. Gracias –

1

crear un archivo ZIP sobre la marcha utilizando http://www.icsharpcode.net/opensource/sharpziplib/.

+0

es posible crear en formato rar ,,, – deepu

+0

@deepu probablemente tenga que usar rar.exe crear un archivo-rar. – Fedearne

+0

Este hilo tiene información sobre RAR: http://stackoverflow.com/questions/1025863/read-content-of-rar-files-using-c. –

0

Los 3 bibliotecas que conozco son SharpZipLib (formatos versátiles), DotNetZip (todo postal), y ZipStorer (pequeño y compacto). No hay enlaces, pero todos están en codeplex y se encuentran a través de google. Las licencias y las características exactas varían.

Happy coding.

3

Esta es la forma de hacerlo de la manera DotNetZip: DI dar fe de DotNetZip porque lo he utilizado y es, con mucho, la biblioteca de compresión más fácil para C# que he encontrado :)

Comprobar http://dotnetzip.codeplex.com/

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

Cree un archivo comprimido descargable dentro de ASP.NET. Este ejemplo crea un archivo comprimido dinámicamente dentro de un método de devolución de ASP.NET, luego descarga ese archivo zip al buscador solicitante a través de Response.OutputStream. No se crea archivo zip en el disco.

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(); 
} 
+0

Hola ... Gracias por esta agradable respuesta. Pero quiero saber si puedo cambiar el nombre del archivo antes de agregarlo a zip (antes del comando zip.AddFile). Estoy hablando del archivo que se va a agregar al ZIP, no del nombre del archivo comprimido. –

Cuestiones relacionadas