画像をデータストアへ保存&データストアの画像を画面へ出力
urls.py とかは随時適切に記述
models.py
# -*- coding: utf-8 -*- from django.utils.translation import ugettext_lazy as _ from google.appengine.ext import db class Image(db.Model): # 画像を登録した日時 created_date = db.DateTimeProperty(auto_now_add=True) # 画像データ:バイナリ image = db.BlobProperty() # 画像サイズ imgsize = db.IntegerProperty() # 画像タイプ:mimetype imgtype = db.StringProperty()
views.py
# -*- coding: utf-8 -*- from django.http import HttpResponseRedirect, HttpResponse from XXX.models import Image # ファイルアップロードフォーム表示 def imageform(request): result = ''' <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>file upload</title> </head> <body> <form method="post" action="./imageupload" enctype="multipart/form-data"> <input type="file" name="photo"> <input type="submit" value="アップロード"> </form> <br> <br> <a href="./imagedisplay">アップロード画像一覧</a> </body> </html> ''' return HttpResponse(result, mimetype='text/html') # ファイルアップロード処理 def imageupload(request): if request.method == 'POST' and request.FILES.has_key('photo') : photo = request.FILES['photo'] imagemodel = Image() imagemodel.image = photo.read() imagemodel.imgsize = photo.size imagemodel.imgtype = photo.content_type imagemodel.put() pr = {} pr['charset'] = photo.charset pr['content_type'] = photo.content_type pr['name'] = photo.name pr['size'] = photo.size # サイズだけなら len() でもとれる # pr['size'] = len(photo) return HttpResponse('アップロード完了', mimetype='text/html') return HttpResponse('アップロードする画像がない', mimetype='text/html') # ファイル閲覧 def imagedisplay(request): # とりあえず最新の1件を取得して出力するところまで image_list = Image.all().order('-created_date').fetch(1) image_data = image_list[0] data = image_data.image imgtype = str(image_data.imgtype) return HttpResponse(data, mimetype=imgtype)