Архивирование динамических файлов в App Engine (Python) - PullRequest
6 голосов
/ 08 июня 2009

Могу ли я в любом случае сжать динамически сгенерированный контент, например, недавно обработанный HTML-шаблон, в zip-файл, используя zipfile?

Кажется, есть несколько примеров для архивирования статического контента, но нет ни одного для архивирования динамических. Или это вообще невозможно?

Еще один вопрос: возможно ли создать zip-файл с кучей подпапок внутри него?

Спасибо.

Ответы [ 3 ]

14 голосов
/ 08 июня 2009

Рабочий код: (для движка приложения:)

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())

Еще раз спасибо Шнуки и Райану.

7 голосов
/ 08 июня 2009

Вы можете добавить все, что хотите, в zip-файл, используя 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)
3 голосов
/ 08 июня 2009

В дополнение к превосходному ответу Schnouki, вы также можете передать ZipFile объект, похожий на файл, например, созданный StringIO.StringIO .

...