Я пытаюсь создать zip-файл и сохранить его в Blobstore App Engine. Прямо сейчас, я не получаю действительный zip-файл из Blobstore. Не уверен, что проблема связана с записями, хранением, извлечением или загрузкой.Создавать почтовые файлы и хранить в GAE BlobStore
Я построил код на основе фрагментов из следующих вопросов.
- Is it possible to generate and return a ZIP file with App Engine?
- Zipping dynamic files in App Engine (Python)
После хранения в Blobstore, я позволил пользователям загрузить его через приложение Flask.
Вот суть того, что я пытаюсь сделать.
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
Любая помощь очень ценится.
Спасибо! Ваш код работает. Вероятно, он поврежден во время извлечения. Программа построена на Flask, и именно по этой причине я прочитал файл и подал заявку. Я попробовал send_blob, но для этого нужны заголовки. Мне нужно будет найти некоторые обходные пути, чтобы обслуживать файл blob непосредственно через флеш-фреймворк. –
Похоже, что это проблема того, кто получает обработку URL-адресов. Для изображений в blobstore есть get_serving_url. Мне еще предстоит выяснить, как обслуживать файлы из blobstore через Flask. –
Еще один шаг. 'ответ = make_response()' ' response.headers [ 'X-AppEngine-BlobKey'] = blob_key' ' response.headers [ 'Content-Type'] = «применение/zip'' ' response.headers ['Content-Disposition'] = 'attachment; filename = "loremipsum.zip" '' ' return response' Но это еще не решило исходную проблему! –