使用GAE「helloworld」示例應用程序作爲基礎,但將「helloworld.py」更改爲:對於<input type =「file」...> self.request.POST [name]只是一個字符串
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:
- 點擊 「選擇文件」
- 選擇要上傳的文件
- 點擊 「提交」
該回來的網頁顯示:
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對象,我希望程序顯示上傳文件的MIME類型。
我需要cgi.FieldStorage對象,這樣我就可以獲得mimetype,當然還有值,也就是文件的內容。我究竟做錯了什麼?
順便說一下,從webapp2切換到webapp(使用from google.appengine.ext import webapp
)沒有什麼區別。另外,在Safari或Firefox中運行它,其表現與Chrome中相同。
謝謝!我的示例適用於該更改。 Q1。在使用POST時,您的想法是什麼?因爲它使用小寫字母? Q2。爲什麼使用Blobstore優先於數據存儲BlobProperty(我不明白從文檔中)? – Lindsay 2013-03-24 12:33:36
更新了我的答案 – 2013-03-24 15:09:24