如何使用Python获取Blob Key



我很难存储然后检索blobstore键。看来我能够获取数据库行键#而不是blob键#

1)我不确定如何存储钥匙2)另外,我不确定数据当前如何存储到Userphoto数据架构中设置3)如何检索与当前用户相关的blob键,因此我可以显示i?

的链接

任何帮助将不胜感激。

from google.appengine.api import users
from google.appengine.ext import webapp
from google.appengine.ext.webapp.util import run_wsgi_app
from google.appengine.ext import blobstore
from google.appengine.ext.webapp import blobstore_handlers
from google.appengine.ext import db
import urllib

class UserPhoto(db.Model):
    user = db.StringProperty()
    user1 = db.EmailProperty()        
    blob_prop = blobstore.BlobKey
    blob_key = blobstore.BlobReferenceProperty()

class MainPage(webapp.RequestHandler):
   def get(self):
    user = users.get_current_user()
    upload_url = blobstore.create_upload_url('/upload')
    existing_data = "<br>"

    if user:

        data = UserPhoto.all()

        #filter data by user e-mail
        results = data.filter("user1 = ", user.email())
        for dt in results:
            existing_data +='<a href="/serve/%s' % dt.key() + '">'
            existing_data += '%s' % dt.key() + '<br>'   
        self.response.out.write(
            '<div align=center>Hello %s <a align="center" href="%s">Sign out</a><br>Is administrator: %s' % 
            (user.nickname(), users.create_logout_url("/"), users.is_current_user_admin())           
            +'<form action="%s" method="POST" enctype="multipart/form-data">' % upload_url+
            """<br>Upload File: <input type="file" name="file"><br> <input type="submit"
            name="submit" value="Submit"> </form>
            <br>"""+existing_data + "</div>"
        )
       #the code below is used for testing...purposes only...
        for b in blobstore.BlobInfo.all():
            self.response.out.write('<li><a href="/serve/%s' % str(b.key()) + '">' + str(b.filename) + '</a>')
    else:
        self.redirect(users.create_login_url(self.request.uri))

class UploadHandler(blobstore_handlers.BlobstoreUploadHandler):
    def post(self):
    upload_files = self.get_uploads('file')  # 'file' is file upload field in the form
    blob_info = upload_files[0] 
    user = users.get_current_user()
    if user:
            data = UserPhoto()
            data.user1 = users.get_current_user().email()
            data.blob_key = str(blob_info.key())
           # data.user2[0] = self.get_uploads()
           data.blob_prop = blob_info.key()
            data.put()

    #self.redirect('/serve/%s' % blob_info.key())
        self.redirect('/')

class ViewPhotoHandler(blobstore_handlers.BlobstoreDownloadHandler):
def get(self, photo_key):
    blob_key = str(urllib.unquote(photo_key))
    if not blobstore.get(photo_key):
        self.error(404)
    else:
        #self.send_blob(photo_key)
        #self.send_blob('/serve/%s' % photo_key)
        self.send_blob(blobstore.BlobInfo.get(blob_key), save_as=True)

 class ServeHandler(blobstore_handlers.BlobstoreDownloadHandler):
   def get(self, resource):
    resource = str(urllib.unquote(resource))
    blob_info = blobstore.BlobInfo.get(resource)
    self.send_blob(blob_info)
application = webapp.WSGIApplication([('/', MainPage),
                           ('/upload', UploadHandler),
                           ('/serve/([^/]+)?', ServeHandler),
                           ('/view_photo/([^/]+)?', ViewPhotoHandler)
                           ],debug=True)
def main():
  run_wsgi_app(application)

if __name__ == "__main__":
  main()

当您构造输出时,您要要求UserPhoto实体密钥,而不是该实体中的BlobStore参考。应该是:

existing_data +='<a href="/serve/%s">' % dt.blob_key

最新更新