none
Archivos PDF corruptos al utilizar libreria Ionic.Zip RRS feed

  • Pregunta

  • Buenas tardes.

    Quiero añadirle la funcionalidad de cargar y descargar archivos pdf a una aplicación, para ello utilizo los métodos de la librería Ionic.Zip para comprimirlos en la carga, tras implementar el código la subida de archivo, aparentemente, lo hace correctamente, pero al descargar y abrir el archivo pdf la aplicación da un error indicando que el archivo esta dañado. A continuación pongo el código de las funciones para comprimir y descomprimir los archivos.

            public static byte[] UnzipArchivo(byte[] zipped, out string filename)
            {
                filename = Resources.Shared.UnknownDocument;
                using (ZipFile zip = ZipFile.Read(zipped))
                {
                    using (var ms = new MemoryStream())
                    {
                        if (zip != null &&
                            zip.EntryFileNames.Count > 0)
                        {
                            filename = zip.EntryFileNames.FirstOrDefault();
                            zip.Entries.FirstOrDefault().Extract(ms);
                            return ms.ToArray();
                        }
                        else
                            throw new FileLoadException(Resources.Shared.ImpossibleLoadFile);
                    }
                }
            }
    
    
            public static byte[] ZipArchivo(HttpPostedFileBase uploadedFile)
            {
                byte[] result = null;
    
                if (uploadedFile != null &&
                    uploadedFile.FileName.Length != 0)
                {
                    using (ZipFile zip = new ZipFile())
                    {
                        using (MemoryStream streamDocumento = new MemoryStream())
                        {
                            zip.AddEntry(uploadedFile.FileName, uploadedFile.InputStream.ToString(), streamDocumento);
                            zip.Save(streamDocumento);
    
                            return streamDocumento.ToArray();
                        }
                    }
                }
    
                return result;
            }

    Finalmente pongo el código correspondiente al controlador que se encarga de la descarga del archivo pdf y abrirlo en la aplicación.

            public virtual ActionResult DescargaArchivo(int masterId, EditArchivoViewModel archivoModel)
            {
    
                Archivo archivo = _archivoService.Find(archivoModel.Id);
    
                string filename = string.Empty;
                byte[] archivoAux = null;
                archivoAux = Helpers.ZipUtil.UnzipArchivo(archivo.Contenido, out filename);
                
                return File(archivoAux, "application/pdf", filename);
            }

    No se el porque del error de archivo dañado.

    Saludos y gracias por vuestro tiempo.

    lunes, 17 de marzo de 2014 16:18