【问题标题】:how to upload muti file using html5 on google app engine(python)如何在谷歌应用引擎(python)上使用html5上传多个文件
【发布时间】:2011-05-15 05:59:49
【问题描述】:

这是我的代码,upload.py:

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

index.html 是:

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

您可以使用file = self.request.POST['file'] 获取一个文件,但使用html5 多文件,

post 时如何使用 python 获取 muti 文件?

谢谢

上传

现在好了,关注这篇文章: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)

【问题讨论】:

    标签: python google-app-engine html upload


    【解决方案1】:

    您可能希望为此使用 blobstore 服务;我写了一系列帖子(123),介绍如何使用上传小部件将多文件上传到 blobstore。

    【讨论】:

    • 哇,尼克!这让我想在周末再次启动 GAE ^^
    【解决方案2】:

    AFAIK,request.POST['file'] 应该是一个文件字典,即POST['file'] 应该有键作为上传文件的名称,值应该是文件的内容,即POST['file']['avatar.png'] = ... # raw image data

    我不知道GAE HTTP Request类提供了什么功能,但是应该和这个一致。无论如何,它肯定self.request,某处!

    编辑:

    好的,我刚刚注意到 GAE 为你创建了一个文件对象,我猜这应该可以:

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

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-12-01
    • 2013-05-19
    • 2012-05-01
    • 2012-07-27
    • 2014-06-18
    • 2014-10-18
    • 2023-03-25
    相关资源
    最近更新 更多