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())