不能以多部分形式获得post参数

时间:2015-01-18 17:03:56

标签: python html google-app-engine

我在bootstrap页面的模式中显示以下表单 目的是上传一个隐藏ID的文件 该应用程序基于Google App Engine,Python / Webapp2

<form action="someUrl" role="form" method="POST" enctype="multipart/form-data">
                    <input type="hidden" name="entityId" value="{{datastoreEntity.key.id()}}"/>
                 <input name="importFile" type="file" multiple>
                 <input type="text" class="form-control" readonly>

                    <input type="submit" name="submit" value="Import">


                </form>

问题出在相关的RequestHandler(服务器端),我可以用

检索文件
    raw_file = self.request.POST.multi['importFile'].file

但我无法获取id(由Jinja2正确生成 - 在页面源中检查)。我已经尝试了

     self.request.get('entityId')
     self.request.POST['entityId']
     self.request.POST.multi['entityId']

2 个答案:

答案 0 :(得分:1)

当你以最简单的方式联系它时,我无法重现这个问题。我已将该模板复制到form.html,将/直接复制到MainHandler,并扣除了通常的准备工作(导入,jinja_environment并带有FileLoader当前的dir等,我有):

class It(ndb.Model):
    name = ndb.StringProperty()

class MainHandler(webapp2.RequestHandler):
    def get(self):
        dse = It(name="Willy")
        dsek = dse.put()
        datastoreEntity = dsek.get()
        template = jinja_environment.get_template('form.html')
        self.response.write(template.render(dict(
            datastoreEntity=datastoreEntity,
        )))
    def post(self):
        self.response.headers['Content-Type'] = 'text/plain' 
        self.response.write(self.request.get('entityId'))

访问/,选择文件,然后点击Import按钮,我在浏览器上看到:5066549580791808 - 根据需要,它似乎是典型的数据存储区实体ID。

请&#34;插入&#34;在这个玩具超简化版本之间,以及你想要做的更复杂的事情之间,编辑你的Q以向我们展示你可以重现问题的最简单方式,谢谢!

答案 1 :(得分:-1)

通过App Engine中的文件输入上传要求应用程序使用从blobstore API获取的路径。该文件是here。所以你可能想做类似

的事情
upload_url = blobstore.create_upload_url('/someUrl')

然后将其注入您的模板,以便表单可以使用它

<form action="{{upload_url}}" ...

文件上传完成后,blobstore将重定向到/someUrl,您可以在其中处理表单的其余部分,包括.file