Geo*_*ath 7 python zip google-app-engine blobstore flask
我正在尝试生成一个zip文件并存储在App Engine的Blobstore中.现在,我没有从Blobstore获得有效的zip文件.不确定问题是压缩,存储,检索还是下载.
我已经根据以下问题的片段构建了代码.
在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
Run Code Online (Sandbox Code Playgroud)
任何帮助深表感谢.
您的大部分代码都适用于dev_appserver.py中的webapp处理程序.我的下面的版本直接从Blobstore提供zip文件,而不是尝试将其读入应用程序实例RAM并提供服务.也许这就是你的意图?如果没有,继续在代码中查找读取并提供值的问题,因为我相信您在Blobstore中创建了一个有效的Zip文件.
#!/usr/bin/env python
import StringIO
import zipfile
from google.appengine.api import files
from google.appengine.ext import blobstore
from google.appengine.ext import webapp
from google.appengine.ext.webapp import blobstore_handlers
from google.appengine.ext.webapp import util
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()
class MainHandler(blobstore_handlers.BlobstoreDownloadHandler):
def get(self):
k = self.request.get('key')
if k:
self.send_blob(k)
return
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)
self.response.out.write('<a href="/getzip?key=%s">get zip</a>' % blob_key)
application = webapp.WSGIApplication([('/getzip', MainHandler)])
def main():
util.run_wsgi_app(application)
if __name__ == '__main__':
main()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2530 次 |
| 最近记录: |