2011年1月22日土曜日

GAE上のFlaskで画像アップ&表示

みなさん。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={{画像のキー}}" >

0 件のコメント:

コメントを投稿