みなさん。Flask使ってますか。
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={{画像のキー}}" >