Действительно ли возможно генерировать и возвратить zip-файл с Механизмом Приложения?

В случае FileInputStream существует метод finalize(), который освободит ресурсы, когда поток будет собран мусором.

Не то, чтобы вы могли или должны полагаться на это. Это то, что делает FileInputStream. SocketInputStream с другой стороны переопределяет finalize(), чтобы явно ничего не делать, полагаясь на Socket, чтобы закрыть ресурсы (и Socket не имеет метода finalize()).

19
задан Soviut 24 February 2009 в 21:56
поделиться

3 ответа

zipfile доступен в appengine и переделал , пример следует:

from contextlib import closing
from zipfile import ZipFile, ZIP_DEFLATED

from google.appengine.ext import webapp
from google.appengine.api import urlfetch

def addResource(zfile, url, fname):
    # get the contents      
    contents = urlfetch.fetch(url).content
    # write the contents to the zip file
    zfile.writestr(fname, contents)

class OutZipfile(webapp.RequestHandler):
    def get(self):
        # Set up headers for browser to correctly recognize ZIP file
        self.response.headers['Content-Type'] ='application/zip'
        self.response.headers['Content-Disposition'] = \
            'attachment; filename="outfile.zip"'    

        # compress files and emit them directly to HTTP response stream
        with closing(ZipFile(self.response.out, "w", ZIP_DEFLATED)) as outfile:
            # repeat this for every URL that should be added to the zipfile
            addResource(outfile, 
                'https://www.google.com/intl/en/policies/privacy/', 
                'privacy.html')
            addResource(outfile, 
                'https://www.google.com/intl/en/policies/terms/', 
                'terms.html')
32
ответ дан 30 November 2019 в 03:08
поделиться

От , Что является Google App Engine :

можно загрузить другие сторонние библиотеки с приложением, пока они реализованы в чистом Python и не требуют никаких неподдерживаемых стандартных модулей библиотеки.

Так, даже если это не существует по умолчанию, можно (потенциально) включать его сами. (Я говорю потенциально , потому что я не знаю, требует ли библиотека zip Python каких-либо "неподдерживаемых стандартных модулей библиотеки".

2
ответ дан 30 November 2019 в 03:08
поделиться
import zipfile
import StringIO

text = u"ABCDEFGHIJKLMNOPQRSTUVWXYVabcdefghijklmnopqqstuvweyxáéöüï东 廣 広 广 國 国 国 界"

zipstream=StringIO.StringIO()
file = zipfile.ZipFile(file=zipstream,compression=zipfile.ZIP_DEFLATED,mode="w")
file.writestr("data.txt.zip",text.encode("utf-8"))
file.close()
zipstream.seek(0)
self.response.headers['Content-Type'] ='application/zip'
self.response.headers['Content-Disposition'] = 'attachment; filename="data.txt.zip"'
self.response.out.write(zipstream.getvalue())
9
ответ дан 30 November 2019 в 03:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: