Question

J'ai un petit projet qui serait parfait pour Google App Engine. Sa mise en œuvre dépend de la capacité de générer un fichier ZIP et le retourner.

En raison de la nature distribuée de App Engine, de ce que je peux dire, le fichier ZIP ne peut être créé « en mémoire » dans le sens traditionnel. Il aurait essentiellement à générer et et envoyé en une seule demande / cycle de réponse.

Le module Python zip existe même dans l'App Engine environnement?

Était-ce utile?

La solution

zipfile est disponible à AppEngine et retravaillé exemple suit:

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

Autres conseils

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

De Qu'est-ce que Google App Engine :

  

Vous pouvez télécharger d'autres tiers   bibliothèques avec votre application, comme   tant qu'ils sont mis en œuvre dans le plus pur   Python et ne nécessitent pas   non pris en charge des modules de la bibliothèque standard.

Alors, même si elle n'existe pas par défaut, vous pouvez (potentiellement) inclure vous-même. (Je dis potentiellement parce que je ne sais pas si la bibliothèque zip Python nécessite des "modules de la bibliothèque standard non pris en charge".

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top