使用 GAE“helloworld”示例应用程序作为基础,但将“helloworld.py”更改为:
import webapp2
class MainPage(webapp2.RequestHandler):
def get(self):
self.response.headers['Content-Type'] = 'text/html'
self.response.write(
"""
<form method="post">
UPLOAD: <input type="file" name="file_param"/>
<br/>
<input type="submit" name="submit_param" value="Submit">
</form>
"""
)
def post(self):
field_storage = self.request.POST["file_param"]
try:
mimetype = field_storage.type
self.response.write("Mimetype: {}".format(mimetype))
except:
self.response.write("No FieldStorage object, field_storage={}".format(field_storage))
app = webapp2.WSGIApplication([('/', MainPage)], debug=True)
在 Mac OSX 上的 Google Chrome 中运行:
- 点击“选择文件”
- 选择要上传的文件
- 点击“提交”
返回的页面说:
No FieldStorage object, field_storage=<the name of the file I uploaded>
根据http://webapp-improved.appspot.com/guide/request.html#files和各种帖子中的示例,self.request.POST[name]
应该是一个 cgi.FieldStorage 对象。但正如本例所示,self.request.POST[name]
是一个包含上传文件的文件名的字符串。如果它是一个 cgi.FieldStorage 对象,我希望程序显示上传文件的 mimetype。
我需要 cgi.FieldStorage 对象,这样我才能获得 mimetype,当然还有值,即文件的内容。我究竟做错了什么?
顺便说一句,从 webapp2 切换到 webapp(使用from google.appengine.ext import webapp
)没有任何区别。此外,在 Safari 或 Firefox 中运行它,它的行为与在 Chrome 中相同。