source google from engine code app python google-app-engine zip in-memory

python - google - ¿Es posible generar y devolver un archivo ZIP con App Engine?



app engine task queue python (3)

De qué es el motor de aplicaciones de Google :

Puede cargar otras bibliotecas de terceros con su aplicación, siempre que estén implementadas en Python puro y no requieran módulos de biblioteca estándar no compatibles.

Por lo tanto, incluso si no existe de forma predeterminada, puede (potencialmente) incluirlo usted mismo. (Digo potencialmente porque no sé si la biblioteca zip de Python requiere algún "módulo de biblioteca estándar no compatible".

Tengo un pequeño proyecto que sería perfecto para Google App Engine. Implementarlo depende de la capacidad de generar un archivo ZIP y devolverlo.

Debido a la naturaleza distribuida de App Engine, por lo que puedo decir, el archivo ZIP no se pudo crear "en memoria" en el sentido tradicional. Básicamente, se tendría que generar y enviar en un solo ciclo de solicitud / respuesta.

¿Existe el módulo zip de Python en el entorno de App Engine?


zipfile está disponible en appengine y el example reelaborado a continuación:

from contextlib import closing from zipfile import ZipFile, ZIP_DEFLATED from google.appengine.ext import webapp from google.appengine.api import urlfetch def addResource(zfile, url, fname): # get the contents contents = urlfetch.fetch(url).content # write the contents to the zip file zfile.writestr(fname, contents) class OutZipfile(webapp.RequestHandler): def get(self): # Set up headers for browser to correctly recognize ZIP file self.response.headers[''Content-Type''] =''application/zip'' self.response.headers[''Content-Disposition''] = / ''attachment; filename="outfile.zip"'' # compress files and emit them directly to HTTP response stream with closing(ZipFile(self.response.out, "w", ZIP_DEFLATED)) as outfile: # repeat this for every URL that should be added to the zipfile addResource(outfile, ''https://www.google.com/intl/en/policies/privacy/'', ''privacy.html'') addResource(outfile, ''https://www.google.com/intl/en/policies/terms/'', ''terms.html'')


import zipfile import StringIO text = u"ABCDEFGHIJKLMNOPQRSTUVWXYVabcdefghijklmnopqqstuvweyxáéöüï东 廣 広 广 國 国 国 界" zipstream=StringIO.StringIO() file = zipfile.ZipFile(file=zipstream,compression=zipfile.ZIP_DEFLATED,mode="w") file.writestr("data.txt.zip",text.encode("utf-8")) file.close() zipstream.seek(0) self.response.headers[''Content-Type''] =''application/zip'' self.response.headers[''Content-Disposition''] = ''attachment; filename="data.txt.zip"'' self.response.out.write(zipstream.getvalue())