Google app engine 对于<;输入类型=";文件"&燃气轮机;self.request.POST[name]只是一个字符串

Google app engine 对于<;输入类型=";文件"&燃气轮机;self.request.POST[name]只是一个字符串,google-app-engine,webapp2,Google App Engine,Webapp2,使用GAE“helloworld”示例应用程序作为基础,但将“helloworld.py”更改为: 导入webapp2 类主页(webapp2.RequestHandler): def get(自我): self.response.headers['Content-Type']='text/html' self.response.write( """ 上传: """ ) def post(自我): field_storage=self.request.POST[“文件参数”] 尝试: mime

使用GAE“helloworld”示例应用程序作为基础,但将“helloworld.py”更改为:

导入webapp2
类主页(webapp2.RequestHandler):
def get(自我):
self.response.headers['Content-Type']='text/html'
self.response.write(
"""
上传:

""" ) def post(自我): field_storage=self.request.POST[“文件参数”] 尝试: mimetype=字段\存储类型 self.response.write(“Mimetype:{}”.format(Mimetype)) 除: self.response.write(“无字段存储对象,字段存储={}”。格式(字段存储)) app=webapp2.WSGIApplication([('/',主页)],debug=True)
在Mac OSX上的Google Chrome中运行此功能:

  • 单击“选择文件”
  • 选择要上载的文件
  • 单击“提交”
  • 返回的页面显示:

    No FieldStorage object, field_storage=<the name of the file I uploaded>
    
    无字段存储对象,字段存储=
    
    根据各种帖子中的示例,
    self.request.POST[name]
    应该是一个cgi.FieldStorage对象。但正如本例所示,
    self.request.POST[name]
    是一个包含上传文件名的字符串。如果它是cgi.FieldStorage对象,我希望程序显示上传文件的mimetype

    我需要cgi.FieldStorage对象,以便获得mimetype,当然还有值,即文件的内容。我做错了什么?


    顺便说一句,从webapp2切换到webapp(使用google.appengine.ext import webapp的
    )没有什么区别。此外,在Safari或Firefox中运行它时,它的行为与Chrome中相同。

    表单的
    enctype
    必须是
    多部分/表单数据。请按如下方式添加(方法属性不区分大小写):

    
    

    也请考虑使用,因为它没有大小限制,你也可以,这将给你更灵活的ACL和共享能力。我的样本适用于这种变化。问题1。你是怎么想的大写后,因为它与小写?问题2。为什么要优先使用Blobstore而不是数据存储BlobProperty(文档中我不清楚)?

    No FieldStorage object, field_storage=<the name of the file I uploaded>
    
    <form method="POST" enctype="multipart/form-data">