2009年4月1日水曜日

Google App Engine BlobPropertyについて


ファイルをアップロードし、それをgoogle app engine上のデータストアに保存する



#encoding=UTF-8
from google.appengine.ext import webapp
from google.appengine.ext.webapp.util import run_wsgi_app
from google.appengine.api import images
from google.appengine.ext import db
import cgi
import os
import shutil

class MyModel(db.Model):
blob = db.BlobProperty()

class testimc(webapp.RequestHandler):
def get(self):
self.response.out.write(
'''
<html><body>
<form action="/filec" method="post" name="fc" enctype="multipart/form-data">
<input type="text" name="txt" /><br>
<input type="file" name="f_name"><br>
<input type="submit" value="Send">
</form>
</body></html>
'''
)
class testfile(webapp.RequestHandler):
def post(self):
avatar = self.request.get('f_name')
model = MyModel()
model.blob = db.Blob(avatar)
model.put()

self.redirect('/inner')
"""
form = cgi.FieldStorage()
if form.has_key('f_name'):
item = form['f_name']
if item.file:
UPLOAD_DIR = 'kabudir'
fout = file(os.path.join(UPLOAD_DIR,item.filename), 'wb')

self.response.out.write('<html><body>')
self.response.out.write('Success file upload<br>')
con = 0
while 1:
line = item.file.readline()
fout.write(line)
self.response.out.write(line)
if not line:
break
con = con + 1
#self.response.out.write(os.getcwd())
self.response.out.write('</body></html>')

else:
self.response.out.write('Not File')
"""
class innerfile(webapp.RequestHandler):
def get(self):
models = db.GqlQuery("SELECT * FROM MyModel")

for model in models:
if model.blob:
#img = images.Image(model.blob)
#img.resize(width=100,height=100)
#thumb = img.execute_transforms()

#self.response.headers['Content-Type'] = 'image/png'
# To download Wordfile
#self.response.headers['Content-Type'] = 'application/msword'
self.response.out.write(model.get("agprYWJ1LWFwcDAwcg0LEgdNeU1vZGVsGAEM ").blob)
return

application = webapp.WSGIApplication(
[('/',testimc),
('/filec',testfile),
('/inner',innerfile)],
debug=True)

def main():
run_wsgi_app(application)

if __name__ == "__main__":
main()
追記:app.yamlファイルのapplicationの部分は全部小文字の記号とかも限定したものしか使えない。

0 件のコメント:

コメントを投稿