zipfile có sẵn tại appengine và làm lại example sau:
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')
Giữ lưu ý giới hạn kích thước phản hồi trên App Engine là 10MB, do đó bạn không thể trả lại tệp zip lớn hơn điều đó. Có thể sử dụng API tệp mới (SDK 1.4.3), bạn có thể tạo tệp zip, lưu trữ nó trong blobstore, sau đó trả về –
Câu trả lời này không thành công tại 'buf = zipf.read (2048)'; không có ref trước đó erence để 'zipf'; sử dụng câu trả lời bên dưới – Justin
@Justin: Mã mẫu cập nhật phải hoạt động tốt hơn. – myroslav