Frage

Ich bin mit Kolben auf Google App Engine und suche verzweifelt um Hilfe, diese zu lösen. Die GAE Dokumentation spricht von Speichern von Bildern in den Datenspeicher des BlobProperty verwenden, die so etwas wie dies geschehen soll: -

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

Nun sollte das Bild, indem Sie diese im Datenspeicher gespeichert werden: -

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

Aber sind nicht in der Lage, dies zu tun. wie ich akzeptiert db.Blob einen String, sondern ein Dateispeicher Objekt ... kann jemand helfen mir mit diesem gegeben. Auch wenn mich jemand auf andeuten könnte, wie das Bild wieder nach dem Hochladen streamen.

War es hilfreich?

Lösung

Ok, so ist dies, wie ich es endlich gelöst: -

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

Die oben speichert die Datei als Blob im Datenspeicher und dann kann es durch die unten func abgerufen werden: -

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

Andere Tipps

sollten Sie die BlobStore Nutzung Ihrer Daten zu speichern. Statt eines db.Blob würden Sie blobstore.BlobReferenceProperty werden: http: // Code .google.com / appengine / docs / python / Datenspeicher / typesandpropertyclasses.html # BlobReferenceProperty

Das Hochladen und Herunterladen ist ziemlich einfach, wie hier gezeigt: http: //code.google.com/appengine/docs/python/blobstore/overview.html#Complete_Sample_App

Ich habe folgendes Modell

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

und speichern Sie es nächsten Code verwendet:

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

a Um zu machen Thumbnail Sie nächsten Code verwenden können:

@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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top