2009-06-08 5 views
6

どうしても新しくレンダリングされたhtmlテンプレートなどの動的に生成されたコンテンツを、zipファイルを使用してzipファイルに圧縮することはできますか?App Engine(Python)の動的ファイルをジップする

静的コンテンツを圧縮するためのいくつかの例があるようですが、動的コンテンツを圧縮するための例はありません。それとも、まったく不可能なのでしょうか?

もう1つ質問:内部に複数のサブフォルダを含むzipファイルを作成することはできますか?

ありがとうございました。また

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

答えて

7

Schnoukiの優れた答えには、StringIO.StringIOで作成されたファイルのようなオブジェクトをZipFileに渡すこともできます。

+0

あなたの岩!どうもありがとう。 – checker659

3

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

ます。また、セパレータとして/(またはos.sep)を使用して、サブフォルダを使用することができます:あなたはZipFile.writestr()を使用してzipファイルにしたいものは何でもあなたが追加することができます

+0

ありがとうライアン! _ – checker659

+0

Python 3を使用している場合は、io.BytesIO(StringIOモジュールはなくなり、zipfileにはバイトバッファが必要です)が必要です –

+1

これはApp Engineについてのことです。あなたはおそらく私の最後のコメントを無視する必要があります:)、申し訳ありません。 –

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とライアンのため。

関連する問題