En un proyecto en el que estoy trabajando tenía la necesidad de crear un archivo zip que tuviera varios archivos que estaban en un directorio en el servidor. Para no estar generando el zip manualmente cada vez que se pusiera un archivo nuevo y subirlo por FTP, pensé que sería bueno crearlo dinámicamente con código ASP.NET.
Buscando en Google, encontré esta excelente librería:
Es muy sencilla de usar y los archivos generados se abren correctamente con la herramienta de carpetas comprimidas integrada en Windows y con Winzip.
Instrucciones para generar un archivo zip dinámicamente:
En la página antes mencionada haz clic en Releases y descarga el archivo llamado DotNetZipLib-Runtime-v1.7.zip
. Cuando lo descargues, busca una carpeta llamada DotNetZip-v1.7
y dentro de ella encontrarás un archivo llamado Ionic.Zip.dll
.
Copia ese archivo a la carpeta Bin
de tu aplicación.
Para crear un archivo zip, usa el siguiente código que coloqué en el evento Click
de un Button
, pero que puedes usar donde te convenga.
Primero especifica que vas a utilizar la librería:
- Imports Ionic.Zip
Después úsalo así:
- Protected Sub CrearZip_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles CrearZip.Click
- Response.Clear()
- Dim ElZip As ZipFile = New ZipFile()
- Using ElZip
- ElZip.AddDirectory("C:ArchivosAComprimir", "Documentos")
- ElZip.AddFile("C:OtrosArchivosMiArchivo.pdf", "Documentos")
- ElZip.Save(Response.OutputStream)
- End Using
- Response.AddHeader("Content-Disposition", "attachment; filename=MisDocumentos.zip")
- Response.ContentType = "application/octet-stream"
- Response.End()
- End Sub
Como podrás deducir, AddDirectory
añade un directorio completo, incluyendo todos los archivos y carpetas que contenga, recursivamente. AddFile
añade un archivo específico.
El segundo parámetro de ambas funciones define el directorio raíz propio del archivo zip generado. No tiene que coincidir con la ruta física donde están ubicados los archivos, este valor lo puedes definir tú. En mi ejemplo, el directorio raíz del archivo zip tendrá un único directorio llamado “Documentos”, y bajo él estará MiArchivo.pdf
y toda la carpeta ArchivosAComprimir
.
Cabe mencionar que en mi ejemplo el archivo será enviado al navegador como si se tratara de una descarga, pero también lo podrías almacenar en el disco duro.
Esta librería permite muchas más funciones, como:
- Crear archivo zip y agregarle archivos o directorios
- Listar los archivos dentro de un zip, y extraerlos
- Modificar un archivo zip existente, con la capacidad de renombrar, remover o agregar nuevos elementos
- Crear, guardar (como en mi ejemplo), extraer y leer de un stream
Se puede usar con cualquier lenguaje de .NET y cuenta, incluso, con una GUI que puedes usar en Windows.
Ni la librería ni la GUI tienen costo.
Para descargar la librería, la GUI, y el manual de usuario, ve a la página que puse al principio.
Excelente post! Gracias!