在App Engine中压缩动态文件(Python)

6 投票
3 回答
2407 浏览
提问于 2025-04-15 12:06

有没有办法把动态生成的内容,比如刚刚渲染好的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)

撰写回答