(OT) Re: ZLIB

Catalin Lungu lcatalin en siadv.com
Vie Oct 14 14:58:47 CEST 2005


Hola Erny,
Intento explicarme mejor. Dentro de zope tengo varios ficheros [p1, p2, 
...., pn] que quiero proporcionar a los usuarios de la Web. Dependiendo de 
una fecha introducida por el usuario tengo un external method que se encarga 
de calcular que es lo que se tiene que descargar. Como los ficheros pueden 
ser muchos me gustaría que los pueda comprimir y hacer una sola descarga. 
Cada fichero puede tener hasta 2 megas y el numero de ficheros puede 
aumentar cada semana. Es imprescindible comprimirlos porque como son ascii 
el tiempo de descarga disminuye mucho.  Si podría poner en la web un link a 
un fichero local (por ej. c:/fichero_comprimido) entonces asunto arreglado, 
pero parece que zope no permite esto. Suponiendo que Zope permitiría esto es 
una buena solución o habrá que buscar una forma de crear el fichero 
comprimido dentro de Zope?

Un saludo,
Catalin



----- Original Message ----- 
From: "Ernesto Revilla" <erny en sicem.biz>
To: "La lista de python en castellano" <python-es en aditel.org>
Sent: Thursday, October 13, 2005 11:22 PM
Subject: Re: (OT) Re: [Python-es] ZLIB


> Hola.
> Bueno, no me entero muy bien lo que quieres, por eso repito lo que he 
> entendido:
> * tienes una serie de archivos locales en el sistema de archivos
> * quieres proporcionar estos archivos a los usuarios de la Web
> Hmm, eso no puede ser, ¿verdad? Porque los almacenarías comprimido dentro 
> o fuera de Zope.
> ¿Son archivos que siempre son diferentes?
> ¿Son muy grandes?
> Podría ser algo como:
>
> Esto esto en un archivo externo, para el que después creas un objeto 
> "External Method"
> que lo llamas, por ejemplo, getArchivoZipExterno y que tiene un parámetro:
> from StringIO import StringIO
> from zipfile import ZipFile, ZIP_DEFLATED
> def getArchivoZip(filename):
>    sio = StringIO()
>    zf=ZipFile(sio, mode="w", compression=ZIP_DEFLATED)
>    zf.write(filename)
>    zf.close()
>    return sio.getvalue()
>
> Ahora, en vez de hacer un template, mejor un script, digamos
> Nombre: getArchivoZip
> Parámetros: filename
> Código:
> request = context.REQUEST
> request.RESPONSE.setHeader('Content-Type', 
> 'application/x-*zip*-compressed')
> return context.getArchivoZipExterno(filename)
>
> (Con Zope Page Template también se puede hacer:
> <span tal:replace="structure 
> python:request.RESPONSE.setHeader('Content-Type', 
> 'application/x-*zip*-compressed')" /><span tal:replace="structure 
> python:context.getArchivoZipExterno(context.request['filename'])" />
> )
>
>
> Ahora puedes conseguir cualquier archivo al que el proceso de Zope pueda 
> acceder, comprimido, con 
> http://localhost/getArchivoZip?filename=/etc/passwd
>
> Así que más vale, en el metodo externo limitarlo a sólo servir los 
> archivos de un directorio.
>
> El problema de todo esto es que carga todo el comprimido en memoria lo que 
> es poco escalable. No sé cómo hacerlo. Podrías usar un archivo temporal de 
> alguna manera y mandar eso, aunque no sé cómo se le puede pasar a Zope un 
> descriptor de archivo directamente. Podrías usar algo como LocalFS o 
> ExternaFile o así, para poder acceder al archivo.
>
> Suerte,
> Erny
>
> Catalin Lungu wrote:
>
>> Hola Erny,
>> Pues ni siquiera sabia de la existencia de zipfile, con ella me vale. 
>> Mira te voy a hacer una pregunta mitad Python, mitad Zope porque he visto 
>> que te enteras de los 2. Tengo unos ficheros en Zope añadidos con el 
>> objeto File. Desde una PageTemplate llamo a una external method pasandole 
>> como parametro una lista con la ruta de varios de esos ficheros. En el 
>> external method a trevez del urllib leo los ficheros, los comprimo y 
>> tengo la intención de subir el fichero comprimido como un link para que 
>> se pude descargar que por cierto no tengo ni ideea de hacerlo. De todas 
>> formas esta solución no me vale porque como tengo muchos ficheros el 
>> urllib.urlopen tarda un par de segundos, pues imaginate multiplicado por 
>> 20-30 ficheros. No se si hay alguna forma de hacerlo directamente desde 
>> Zope, el external method que sirva simplemente para comprimir.
>>
>> Un saludo,
>> Perdon por hacer preguntas Zope en el foro de Python
>> _______________________________________________
>> Python-es mailing list
>> Python-es en aditel.org
>> http://listas.aditel.org/listinfo/python-es
>>
>
> _______________________________________________
> Python-es mailing list
> Python-es en aditel.org
> http://listas.aditel.org/listinfo/python-es 




Más información sobre la lista de distribución Python-es