在App Engine中压缩动态文件(Python)
有没有办法把动态生成的内容,比如刚刚渲染好的HTML模板,打包成一个zip文件呢?
我看到有一些例子是关于打包静态内容的,但没有关于动态内容的例子。或者说,这根本就不可能吗?
还有一个问题:能不能在zip文件里创建一些子文件夹呢?
谢谢。
3 个回答
3
除了Schnouki给出的很棒的回答,你还可以给ZipFile传递一个类似文件的对象,比如用StringIO.StringIO创建的对象。
14
这是可以正常运行的代码:(适用于应用引擎:)
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())
再次感谢Schnouki和Ryan的帮助。
7
你可以通过使用 ZipFile.writestr()
方法,把你想要的任何东西添加到一个压缩文件里:
my_data = "<html><body><p>Hello, world!</p></body></html>"
z.writestr("hello.html", my_data)
你还可以使用子文件夹,使用 /
(或者 os.sep
)作为分隔符:
z.writestr("site/foo/hello/index.html", my_data)