2010-11-24 3 views
1

dies ist mein Code, der upload.py hochladenwie Muti-Datei mit html5 auf Google App Engine (Python)

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

möglich Verwenden Sie file = self.request.POST['file'], um eine Datei zu erhalten, aber mit html5 muti Datei,

Wie bekomme ich Muti-Datei mit Python, wenn Post?

dank

Upload

es jetzt in Ordnung ist, folgen Sie diesen Artikel: 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) 

Antwort

2

Sie wollen wahrscheinlich den Blobstore Service für diese verwenden; Ich schrieb eine Reihe von Beiträgen (1, 2, 3), die beschreiben, wie man mit einem Upload-Widget den Upload von mehreren Dateien zum Blobstore durchführt.

+0

Wow Nick! Das hat mich dazu gebracht, GAE wieder für das Wochenende zu starten ^^ –

1

AFAIK, die request.POST['file'] ein Wörterbuch von Dateien sein sollte, dh POST['file'] Schlüssel haben sollte Namen der hochgeladenen Dateien und der Wert sollte der Inhalt der Dateien sein, dh POST['file']['avatar.png'] = ... # raw image data.

Ich weiß nicht, welche Funktionalität die GAE HTTP Request-Klasse bietet, aber das sollte konsistent sein. Wie auch immer, es ist definitiv in self.request, irgendwo!

EDIT:

Ok, ich habe gerade bemerkt GAE erstellt ein Datei-Objekt für Sie, meine vermutet, dass dies funktionieren soll ist:

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

hi, request.POST ['Datei'] ist kein Diktat, es ist FieldStorage, es kann Schleife, http://python.about.com/od/cgiformswithpython/ss/pycgitut1_3.htm – zjm1126