2010-11-24 4 views
1

ceci est mon code, le upload.py:comment télécharger le fichier en utilisant muti html5 sur Google App Engine (python)

class MyModel(db.Model): 
    data = db.BlobProperty(required=True) 
    mimetype = db.StringProperty(required=True) 

class BaseRequestHandler(webapp.RequestHandler): 
    def render_template(self, filename, template_args=None): 
    if not template_args: 
     template_args = {} 
    path = os.path.join(os.path.dirname(__file__), 'templates', filename) 
    self.response.out.write(template.render(path, template_args)) 

class upload(BaseRequestHandler): 
    def get(self): 
    self.render_template('index.html',) 
    def post(self): 
    file = self.request.POST['file'] 
    obj = MyModel(data=file.value, mimetype=file.type) 
    obj.put() 
    o=file 
    #self.response.out.write(''.join('%s: %s <br/>' % (a, getattr(o, a)) for a in dir(o))) 
    #return 
    file_url = "http://%s/download/%d/%s" % (self.request.host, obj.key().id(), file.filename) 
    self.response.out.write("Your uploaded file is now available at <a href='%s'>%s</a>" % (file_url,file_url,)) 

et index.html est:

<form enctype="multipart/form-data" action="/" method="post"> 
    <input type="file" name="file" multiple="true" /> 
    <input type="submit" /> 
</form> 

vous pouvez utiliser file = self.request.POST['file'] pour obtenir un fichier, mais en utilisant le fichier muti html5,

comment obtenir le fichier muti en utilisant python lors de la publication?

grâce

télécharger

il est ok maintenant, Suivre cet article: Receive multi file post with google app engine

class Download_file(db.Model): 
    data = db.BlobProperty(required=True) 
    mimetype = db.StringProperty(required=True) 
    download_url = db.StringProperty() 

class BaseRequestHandler(webapp.RequestHandler): 
    def render_template(self, filename, template_args=None): 
    if not template_args: 
     template_args = {} 
    path = os.path.join(os.path.dirname(__file__), 'templates', filename) 
    self.response.out.write(template.render(path, template_args)) 

class upload(BaseRequestHandler): 
    def get(self): 
     files=Download_file.all() 
     self.render_template('index.html',{'files':files}) 
    def post(self): 
     files = self.request.POST.multi.__dict__['_items'] 
     #self.response.out.write(files) 
     for file in files: 
      file=file[1] 
      obj = Download_file(data=file.value, mimetype=file.type) 
      obj.put() 
      file_url = "http://%s/download/%d/%s" % (self.request.host, obj.key().id(), file.filename) 
      file_url = "<a href='%s'>%s</a>" % (file_url,file_url,) 
      obj.download_url=file_url 
      obj.put() 
      self.response.out.write("Your uploaded file is now available at %s </br>" % (file_url)) 

class download(BaseRequestHandler): 
    def get(self,id,filename): 
     #id=self.request.get('id') 
     entity = Download_file.get_by_id(int(id)) 
     self.response.headers['Content-Type'] = entity.mimetype 
     self.response.out.write(entity.data) 

Répondre

2

Vous voulez probablement utiliser le service Blobstore pour cela; J'ai écrit une série de postes (1, 2, 3) couvrant comment faire télécharger plusieurs fichiers à la blobstore, en utilisant un widget de téléchargement.

+0

Wow Nick! Cela m'a juste donné envie de relancer GAE pour le weekend ^^ –

1

AFAIK, le request.POST['file'] devrait être un dictionnaire de fichiers, par exemple POST['file'] devrait avoir les clés comme noms des fichiers téléchargés et la valeur doit être le contenu des fichiers respectivement, à savoir POST['file']['avatar.png'] = ... # raw image data.

Je ne sais pas quelle est la fonctionnalité fournie par la classe de demande GAE HTTP, mais il doit être cohérent à ce sujet. Quoi qu'il en soit, c'est définitivement en self.request, quelque part!

EDIT:

Ok, je viens de remarquer GAE crée un objet de fichier pour vous, mon deviner est cela devrait fonctionner:

for file in POST['file']: 
    obj = MyModel(data=file.value, mimetype=file.type) 
    obj.put() 
+0

Salut, request.POST ['fichier'] n'est pas une dict, c'est FieldStorage, il ne peut pas boucle, http://python.about.com/od/cgiformswithpython/ss/pycgitut1_3.htm – zjm1126

Questions connexes