使用新的dev_appserver将文件上传到Google App Engine

时间:2014-04-23 00:40:09

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

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&#34;上传的文件直接在request.POST中以cgi.FieldStorage(请参阅cgi模块)实例的形式提供。&#34;但是,request.POST为空,cgi.FieldStorage()不包含&#39; user_file&#39;任

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

我如何获得user_file?

1 个答案:

答案 0 :(得分:0)

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

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