Google App Engine用フレームワークKayを使い、画像ファイルをアップロードする方法。
画像を保存するためのモデルを用意します。
アップロードされた画像を保存するためのBlobPropertyを用意します。
class ThumbnailImage(db.Model):
thumbnail = db.BlobProperty()
アップロードのためのフォームを作成します。
ファイルをアップロードするにはFileFieldを使用します。
class UploadForm(forms.Form):
upload_file = forms.FileField(u'画像ファイル', required=True)
フォームのvalidate()では、引数にrequest.formに加えて、request.filesを指定します。
(参考:11.7. ファイルアップロード — Kay v0.10.0 documentation)
if request.method == 'POST' and form.validate(request.form, request.files):
Images Python APIを使用して、画像を編集します。
uploaded_image = images.Image(form['upload_file'])
uploaded_image.resize(width=100) #幅
thumbnail = uploaded_image.execute_transforms(output_encoding=images.JPEG)
画像データを保存します。
image = ThumbnailImage(thumbnail=thumbnail)
image.put()
保存した画像を表示します。
return Response(image.thumbnail, mimetype='image/jpg')
全体のコードは次のようになります。
myapp/views.py
from google.appengine.ext import db
from google.appengine.api import images
from kay.utils import (forms, render_to_response)
from werkzeug import Response
class ThumbnailImage(db.Model):
thumbnail = db.BlobProperty()
class UploadForm(forms.Form):
upload_file = forms.FileField(u'画像ファイル', required=True)
def index(request):
form = UploadForm()
if request.method == 'POST' and form.validate(request.form, request.files):
#画像をリサイズして保存
uploaded_image = images.Image(form['upload_file'])
uploaded_image.resize(width=100) #幅
thumbnail = uploaded_image.execute_transforms(output_encoding=images.JPEG)
image = ThumbnailImage(thumbnail=thumbnail)
image.put()
#保存した画像を表示
return Response(image.thumbnail, mimetype='image/jpg')
return render_to_response("myapp/index.html",
{'form': form.as_widget()})
myapp/templates/index.html
{{ form() | safe }}
補足
blobstoreを使う方法は「Kay でも blobstore を使う (サムネイルも)」が参考になります。