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?
答案 0 :(得分:0)
想出来(最后!)。当我通过其他问题排序时,我一直在记录请求的元素(参数,正文等)。但是你只能实例化一个cgi.FieldStorage
元素,所以当我到达实际的self.request.get('user_file')
时,它已经消失了。
删除调试实际上使其工作的经典案例。