【问题标题】:Uploading file to Google App Engine using new dev_appserver使用新的 dev_appserver 将文件上传到 Google App Engine
【发布时间】:2014-06-07 14:35:24
【问题描述】:

Google App Engine documentation 使得获取上传文件的内容 (self.request.get('user_file')) 看起来非常简单,但是虽然我可以使用 old_dev_appserver.py 执行此操作,但我无法使用当前的 dev_appserver.py (v1.9.2 )。

这是一个生成传入数据的简单示例:

<form name="myform" action="http://localhost:8080/sync?cmd=tester" enctype="multipart/form-data" method="post">
    Username: <input type="file" name="user_file" />
    <input type="submit" value="Submit" />
</form>
  • 在 old_dev_appserver.py 中,可以通过 self.request.get('user_file') 在 GAE 中获取文件,但不能使用最新的 (1.9.2) dev_appserver.py

  • WebApp2 says "上传的文件可作为 cgi.FieldStorage(参见 cgi 模块)实例直接在 request.POST 中使用。"但是,request.POST 是空的,cgi.FieldStorage() 也不包含 'user_file'。

奇怪的是,如果我打印出 self.request.params,我确实在 UnicodeMultiDict 中看到了一个元素 (u'user_file', FieldStorage(u'user_file', u'myfile.ico'))。但是,当我尝试通过命名访问或仅迭代参数来获取该元素时,我无法获得它。即使我做一个Len(self.request.params) 我得到的比我看到的少一个,并且'user_file'元素丢失了。如果我使用 old_dev_appserver 执行此操作,Len(self.request.params) 是正确的。

如何获取 user_file?

【问题讨论】:

    标签: python google-app-engine file-upload


    【解决方案1】:

    想通了(终于!)。在整理其他问题时,我一直在记录请求的元素(参数、正文等)。但是你只能实例化一个 cgi.FieldStorage 元素一次,所以当我到达实际的 self.request.get('user_file') 时,它已经消失了。

    删除调试实际上使其工作的经典案例。

    【讨论】:

      猜你喜欢
      • 2014-12-28
      • 1970-01-01
      • 2020-04-04
      • 2014-11-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-17
      • 2015-06-30
      相关资源
      最近更新 更多