none
Descargar varios ficheros (imagen) desde un directorio server RRS feed

  • Pregunta

  • Buenas tardes, 

    He desarrollado una aplicacion en asp c# que permite tomar fotos y grabarlas en una base de datos sql, he realizado también la consulta en la cual me permite visualizar esa fotos tomadas, y descargarlas a un fichero comprimido "zip".

    El tema ahora, es que existen muchas fotos y aunque he ajustado su tamaño en el proceso de la carga (grabación), debido a la cantidad de las mismas, el fichero "zip" que me genera es muy grande, hablemos que cada foto puede pesar (mas menos 1 Mb), si tengo 10 y aun comprimiendo el mismo, el fichero resultante esta entre los 5-8 Mb y es demasiado para una descarga por la web. Para este proceso de creación "zip" descargo las fotos y las creo físicamente en un directorio en el server que luego de la generacion borro.

    Si me pueden ayudar con alguna manera de poder descargar todas las imagenes generadas en el directorio que comento genero antes del "zip", o bien, poder generar un "zip" controlado por su tamaño, es decir, si pasa de 3 Mb, que se genere una nueva secuencia y se pueda descargar ambos.

    Muchas Gracias

    Saludos

    miércoles, 22 de febrero de 2017 11:57

Respuestas

Todas las respuestas

  • hola

    podrias ver de fracionar el zip

    .Net library for split volume zip files?

    el problema va a ser la descarga porque en un unico response no podras enviar varios archivos

    quizas debas generar los zip y darles al usuario link que presionar para descargar cada una

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    miércoles, 22 de febrero de 2017 13:13
  • Descargar varios ficheros a la vez no es sencillo, porque http no lo soporta "de fabrica". Existen un par de trucos: uno es construir una pagina que abra varias ventanas usando javascript (o que contenga varios IFrames), y dentro de cada ventana o Iframe meter el codigo que descarga uno de los ficheros. El otro truco es inyectar en la pagina varios hiperenlaces que descarguen los ficheros y usar javascript para ir haciendo "click" en los enlaces.

    Tienes algunos ejemplos en este hilo de StackOverflow:

    http://stackoverflow.com/questions/2339440/download-multiple-files-with-a-single-action

    miércoles, 22 de febrero de 2017 13:19
  • Muchas Gracias Leandro!!!  
    Muchas Gracias Alberto!!!

    Voy a revisar sus propuestas para ver como implementarlas.

    Comento un poco mas como voy hasta ahora:

    Para crear los ficheros Zip, uso el control Ionic Zip. He encontrado un parámetro ( zipfile.ParallelDeflateThreshold = -1;) que me esta funcionando con uno de los ficheros que antes no me permitía (14 mb).

    Lo he tomado de este enlace

    http://stackoverflow.com/questions/11981143/compression-fails-when-using-ionic-zip

    Comparto parte de mi código por si alguien lo necesita mas adelante.

                                using (ZipFile zipfile = new ZipFile())
                                {
                                    zipfile.AlternateEncodingUsage = ZipOption.AsNecessary;
                                    zipfile.CompressionLevel = Ionic.Zlib.CompressionLevel.BestCompression;
                                    zipfile.ParallelDeflateThreshold = -1;
                                    zipfile.AddDirectory(sFolderName);

                                    Response.Clear();
                                    Response.BufferOutput = false;

                                    Response.ContentType = "application/zip";
                                    Response.AddHeader("content-disposition", "attachment; filename=" + sOutputFileName);

                                    zipfile.Comment = "Este fichero fue creado el " + System.DateTime.Now.ToString("G");
                                    zipfile.Save(Response.OutputStream);
                                    zipfile.Dispose();
                                    Response.End();

                                }

    Saludos


    jueves, 23 de febrero de 2017 7:35