Storing images in google datastore using Flask (Python)

flask, google-app-engine, image, python

Solution

Ok so this is how I finally solved it:-

@userreg.route('/mypics',methods=['GET','POST'])
def mypics():    
   if request.method=='POST':
      mydata=MyPics()
      mydata.name=request.form['myname']
      file=request.files['file']
      filedata=file.read()
      if file:
         mydata.pic=db.Blob(filedata)
      mydata.put()
      return redirect(url_for('home'))
   return render_template('mypicform.html')

The above stores the file as a blob in the datastore and then it can be retrieved by the below func:-

@userreg.route('/pic/<name>')
def getpic(name):
     qu=db.Query(MyPics).filter('name =',name).get()
     if qu.pic is None:
         return "hello"
     else:
         mimetype = 'image/png'
         return current_app.response_class(qu.pic,mimetype=mimetype,direct_passthrough=False)

Problem

I am using flask on google app engine and am desperately looking for help to solve this. The GAE documentation talks of storing images in the datastore using the BlobProperty , which should be done something like this:- ``` class MyPics(db.Model): name=db.StringProperty() pic=db.BlobProperty() ``` Now the image should be stored in the datastore by doing this:- ``` def storeimage(): pics=MyPics() pics.name=request.form['name'] uploadedpic=request.files['file'] #where file is the fieldname in the form of the file uploaded pics.pic=db.Blob(uploadedpic) pics.put() redirect ... etc etc ``` But am unable to do this. as I get db.Blob accepts a string , but given a Filestorage object... Can someone help me with this. Also if anybody could hint me on how to stream the image back after uploading.

Original source