Question

J'utilise flacon sur le moteur app google et je cherche désespérément de l'aide pour résoudre ce problème. Les pourparlers de documentation GAE de stockage des images dans le magasin de données à l'aide du BlobProperty, ce qui devrait être fait quelque chose comme ceci: -

class MyPics(db.Model):
      name=db.StringProperty()
      pic=db.BlobProperty()

Maintenant, l'image doit être stocké dans le magasin de données en faisant ceci: -

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

Mais je suis incapable de le faire. que je reçois db.Blob accepte une chaîne, mais étant donné un objet FileStorage ... peut me aider quelqu'un avec cela. Aussi, si quelqu'un pouvait me laisser entendre sur la façon de diffuser l'arrière d'image après le téléchargement.

Était-ce utile?

La solution

Ok, donc voici comment je me suis finalement résolu, il: -

@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')

Les magasins ci-dessus le fichier en tant que blob dans le datastore et il peut être récupéré par le dessous 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)

Autres conseils

Vous devriez envisager d'utiliser le BlobStore pour stocker vos données. Au lieu d'un db.Blob vous utilisez blobstore.BlobReferenceProperty: http: // Code .google.com / appengine / docs / python / datastore / typesandpropertyclasses.html # BlobReferenceProperty

et le téléchargement est Uploading assez facile comme montré ici: http: //code.google.com/appengine/docs/python/blobstore/overview.html#Complete_Sample_App

Je modèle suivant

class Picture(db.Model):    
    data = db.BlobProperty()
    ext = db.StringProperty()
    content_type = db.StringProperty()

et le stocker en utilisant le code suivant:

def create_picture():
    if request.files['file']:                       
        picture.data = request.files['file'].read()
        picture.ext = request.files['file'].filename.rsplit('.', 1)[1]
        picture.content_type = request.files['file'].content_type
        picture.put()
        flash(u'File uploaded', 'correct')
        return redirect(url_for("edit_picture", id=picture.key()))
    else:
        return render_template('admin/pictures/new.html', title=u'Upload a picture', message=u'No picture selected')

Pour rendre une vignette, vous pouvez utiliser le code suivant:

@frontend.route('/thumbnail/<id>/<width>x<height>.<ext>')
def thumbnail(id, width, height, ext):
    key = db.Key(id)
    picture = Picture.get(key)
    img = images.Image(picture.data)

    if width != '0':
        w = int(width)
    else:
        w = img.width

    if height != '0':
        h = int(height)
    else:
        h = img.height

    if img.height > h and h != 0:
        w = (int(width) * img.width) / img.height;

    if img.width > w:
        h = (int(height)  * img.height) / img.width;

    thumb = images.resize(picture.data, width=w, height=h)    
    response = make_response(thumb)
    response.headers['Content-Type'] = picture.content_type
    return response
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top