Estoy intentando generar un archivo zip y almacenarlo en la tienda de blobs de App Engine. En este momento, no obtengo un archivo zip válido de Blobstore. No estoy seguro de que el problema sea al comprimir, almacenar, recuperar o descargar.Generar archivos Zip y almacenarlos en GAE BlobStore
He creado el código basado en fragmentos de las siguientes preguntas.
- Is it possible to generate and return a ZIP file with App Engine?
- Zipping dynamic files in App Engine (Python)
Después de almacenar en el almacén de blob, lo que los usuarios descarguen a través de una aplicación frasco.
Aquí está la esencia de lo que estoy tratando de hacer.
def zipit():
zipstream = StringIO.StringIO()
zfile = zipfile.ZipFile(file=zipstream, mode='w')
bytes = "lorem ipsum dolor sit amet"
zfile.writestr('loremipsum', bytes, compress_type=zipfile.ZIP_STORED)
zfile.close()
zipstream.seek(0)
return zipstream.getvalue()
zip_file = files.blobstore.create(mime_type='application/zip')
zip_data = zipit()
with files.open(zip_file, 'a') as f:
f.write(zip_data)
files.finalize(zip_file)
blob_key = files.blobstore.get_blob_key(zip_file)
blob_data = blobstore.BlobReader(blob_key).read()
# http://flask.pocoo.org/docs/api/
response = make_response(blob_data)
response.headers['Content-Type'] = 'application/zip'
response.headers['Content-Disposition'] = 'attachment; filename="loremipsum.zip"'
return response
Cualquier ayuda es muy apreciada.
Gracias! Tu código funciona Probablemente se corrompe durante la recuperación. El programa se basa en Flask, y esa es la razón por la que leo el archivo y lo sirvo. Intenté send_blob, pero requiere que los encabezados estén disponibles. Tendré que encontrar algunas soluciones para servir el archivo blob directamente a través del marco de Flask. –
Parece que este es un problema de quién maneja las URL. Para las imágenes en blobstore hay get_serving_url. Todavía tengo que averiguar cómo publicar archivos desde blobstore, a través de Flask. –
Otro paso. 'respuesta = make_response()' ' response.headers [ 'X-AppEngine-BlobKey'] = blob_key' ' response.headers [ 'Content-Type'] = 'application/zip'' 'response.headers ['Content-Disposition'] = 'archivo adjunto; filename = "loremipsum.zip" '' ' return response' ¡Pero esto no resuelve el problema original todavía! –