Próbuję wygenerować plik zip i przechowywać w Blobstore App Engine. W tej chwili nie mam prawidłowego pliku zip z Blobstore. Nie masz pewności, czy problem dotyczy zip, przechowywania, pobierania lub pobierania.Generowanie plików zip i magazynu w GAE BlobStore
Zbudowałem kod na podstawie fragmentów z poniższych pytań.
- Is it possible to generate and return a ZIP file with App Engine?
- Zipping dynamic files in App Engine (Python)
Po zapisaniu w Blobstore, mogę pozwolić użytkownikom pobrać go za pośrednictwem aplikacji kolby.
Oto sedno tego, co próbuję zrobić.
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
Każda pomoc jest doceniana.
Dzięki! Twój kod działa. Prawdopodobnie ulega uszkodzeniu podczas pobierania. Program jest zbudowany na Flasku i to jest powód, dla którego czytam plik i służę. Próbowałem send_blob, ale wymaga to dostępności nagłówków. Będę musiał znaleźć sposób obejścia pliku blob bezpośrednio przez framework Flask. –
Wygląda na to, że jest to problem związany z obsługą adresów URL. W przypadku obrazów w blobstore istnieje get_serving_url. Jeszcze nie mogę się dowiedzieć, jak wysyłać pliki z blobstore za pośrednictwem Flask. –
Kolejny krok. 'odpowiedzi = make_response()' 'response.headers [ 'X AppEngine-BlobKey'] = blob_key' ' response.headers [Content-Type "] =„application/zip'' 'response.headers ['Content-Disposition'] = 'załącznik; filename = "loremipsum.zip" '' ' odpowiedź zwrotna ' Ale to jeszcze nie rozwiązuje pierwotnego problemu! –