先ずは画面HTMLからだ。
index.html
<html>
<head>
<meta content='text/html; charset=UTF-8' http-equiv='Content-Type'/>
</head>
<body>
<form enctype="multipart/form-data" method="post" action="/">
<input type="file" name="file" />
<input type="submit" value="アップロード" />
</form>
<p>結果</p>
<p>ファイル名: {{ filename }}</p>
<p>ファイルサイズ(byte): {{ filesize }}</p>
<p>MIMEタイプ: {{ mimetype }}</p>
</body>
</html>
そして、お馴染みの helloworld.py を以下のようにする。
helloworld.py
# -*- coding: utf-8 -*-
import cgi
import os
from google.appengine.ext import webapp, db
from google.appengine.ext.webapp.util import run_wsgi_app
from google.appengine.ext.webapp import template
import logging
#
# メインハンドラ
#
class MainHandler(webapp.RequestHandler):
def get(self):
template_values = {}
path = os.path.join(os.path.dirname(__file__), 'index.html')
self.response.out.write(template.render(path, template_values))
def post(self):
file = self.request.get("file")
if file:
# ファイルサイズ取得
blob = db.Blob(file)
filesize = len(blob)
# ファイル名、MIMEタイプ取得
body_file = self.request.body_file.vars['file']
filename = body_file.filename
mimetype = body_file.headers['content-type']
# 実際はここでデータストアへ格納したりする。。。
template_values = {
"filename" : filename,
"filesize" : filesize,
"mimetype" : mimetype
}
else:
template_values = {}
path = os.path.join(os.path.dirname(__file__), 'index.html')
self.response.out.write(template.render(path, template_values))
application = webapp.WSGIApplication([('/', MainHandler)],
debug=True)
def main():
run_wsgi_app(application)
if __name__ == "__main__":
main()
ポイントは、二つある。
一つ目は、ファイルサイズを取得するところだ。
self.request.get("file") で取ってきた file を db.Blob 型にキャストし、len() でサイズを取得する。
file = self.request.get("file")
blob = db.Blob(file)
filesize = len(blob)二つ目のポイントは、ファイル名とMIMEタイプを取得するところだ。
self.request.body_file.vars['file'] で取得した body_file の filename プロパティからファイル名が、headers['content-type'] でMIMEタイプがそれぞれ取得できる。
body_file = self.request.body_file.vars['file']
filename = body_file.filename
mimetype = body_file.headers['content-type']
ここはひとつポチっとよろしく。
プログラミング Google App Engine
posted with amazlet at 11.06.03
Dan Sanderson
オライリージャパン
売り上げランキング: 40082
オライリージャパン
売り上げランキング: 40082
【GAE for Pythonの最新記事】
- GAE/Pでmemcacheを利用してデ..
- PythonでJST日付をUTC(GMT..
- BeautifulSoupオブジェクトを..
- GAE/Pで詳細なエラーログ(トレース情..
- Pythonでオブジェクトのlistをソ..
- GAE/PでAspyctを使ってAOP(..
- GAE/Pでカスタムタグを作って日付をU..
- GAE/PでBeautifulSoupを..
- GAE/Pでログインが必要なページを取得..
- GAE/Pでリクエストデータの扱い方。
- GAE/PでCRONを使ったスケジュール..
- GAE/PでModelをJSON変換する..
- GAE/P向け統合開発環境 Eclips..
- GAE/PとjQueryでJSONデータ..
- GAE+Pythonの標準モジュールだけ..
- GAE+Pythonでテンプレートの共通..
- GAEアプリをアップロードする方法。
- GAE+Pythonでテンプレートエンジ..
- GAE+Pythonでデータストアを操作..
- webappフレームワークを使ったフォー..
