Zipping dynamic files in App Engine (Python)

ⅰ亾dé卋堺 提交于 2019-11-29 20:05:33

问题


Is there anyway I can zip dynamically generated content, such as a freshly rendered html template, into a zip file using zipfile?

There seem to be some examples around for zipping static content, but none for zipping dynamic ones. Or, is it not possible at all?

One more question: Is it possible to create a zip file with a bunch of sub-folders inside it?

Thanks.


回答1:


You can add whatever you want to a zip file using ZipFile.writestr():

my_data = "<html><body><p>Hello, world!</p></body></html>"
z.writestr("hello.html", my_data)

You can also use sub-folders using / (or os.sep) as a separator:

z.writestr("site/foo/hello/index.html", my_data)



回答2:


The working code: (for app engine:)

output = StringIO.StringIO()
z = zipfile.ZipFile(output,'w')
my_data = "<html><body><p>Hello, world!</p></body></html>"
z.writestr("hello.html", my_data)
z.close()

self.response.headers["Content-Type"] = "multipart/x-zip"
self.response.headers['Content-Disposition'] = "attachment; filename=test.zip"
self.response.out.write(output.getvalue())

Thanks again to Schnouki and Ryan.




回答3:


In addition to Schnouki's excellent answer, you can also pass ZipFile a file-like object, such as one created by StringIO.StringIO.



来源:https://stackoverflow.com/questions/963800/zipping-dynamic-files-in-app-engine-python

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!