BadKeyError:无效的字符串密钥



当我试图创建一个脚本,将从GAE Datastore提供图像时,我得到这个错误。

  File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/api/datastore_types.py", line 379, in __init__
    raise datastore_errors.BadKeyError('Invalid string key %s.' % encoded)
BadKeyError: Invalid string key 5066549580791808.

使用下面的代码:

class ImageHandler(MainHandler):
    def get(self):
        greeting = db.get(self.request.get('id'))
        if greeting.image:
            self.response.headers['Content-Type'] = 'image/png'
            self.response.out.write(greeting.image)
        else:
            self.error(404)

这个类是从GAE上的图像文档创建的

5066549580791808不是键,而是id。

您需要使用SomeModel.get(), db.get()需要整个键,其中包括Model和path

另一个选择是使用Blobstore API

通过这种方式,您可以使用图像API实时提供不同大小的图像:

import webapp2
from google.appengine.api import images
from google.appengine.ext import blobstore
    class Thumbnailer(webapp2.RequestHandler):
        def get(self):
            blob_key = self.request.get("blob_key")
            if blob_key:
                blob_info = blobstore.get(blob_key)
                if blob_info:
                    img = images.Image(blob_key=blob_key)
                    img.resize(width=80, height=100)
                    img.im_feeling_lucky()
                    thumbnail = img.execute_transforms(output_encoding=images.JPEG)
                    self.response.headers['Content-Type'] = 'image/jpeg'
                    self.response.out.write(thumbnail)
                    return
            # Either "blob_key" wasn't provided, or there was no value with that ID
            # in the Blobstore.
            self.error(404)

最新更新