Flask最高ですね。
最近はWebアプリ作るときは何やるにしてもFlaskでやってます。
Javaのモジュールが必要なときはJythonつかってFlask動かすくらいです。
(これはまた別の話)
GAEも最高ですね。
ということで、Flask,GAEについて今日は書きたいと思います。
まあGAE上でFlask使う方法は色々なところで書かれているので割愛。
今日はGAE上のFlaskで画像のアップロードと表示について
結構時間かかったので備忘録として書きます。
pythonコードは以下のような感じ。
from flask import Flask from flask import request from flask import Response from google.appengine.ext import db app = Flask(__name__) @app.route('/image/upload',methods=['POST']) def upload_image(): """画像アップロード""" uploaded_image = request.files['image'] image = Image() image.content_type = uploaded_image.content_type image.image = uploaded_image.stream.read() image.put() return 'ok' @app.route('/image') def disp(): """keyで表示""" image = Image.get(request.args.get('key','')) return Response(response=image.image,content_type=image.content_type) class Image(db.Model): """画像保存用エンティティ""" content_type= db.StringProperty() image = db.BlobProperty()
まず登録時にはBigtable側に画像のバイナリとコンテントタイプを保存しておく。
で表示側にはResponseに画像バイナリとコンテントタイプを返してやる。
画像アップロードのformはこんな感じ
<form action="/admin/image/upload" enctype="multipart/form-data" method="post">
<input type="file" name="image">
<input type="submit" value="upload">
表示側はこんな感じ
<img src="/image?key={{画像のキー}}" >