2

我在尝试创建将从 GAE 数据存储中提供图像的脚本时遇到此错误。

  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 上的图像文档创建的

4

2 回答 2

5

5066549580791808 不是密钥,它是一个 ID。

您需要使用SomeModel.get()db.get()需要整个密钥,其中包括模型和路径。

于 2013-06-18T15:45:31.460 回答
2

另一种选择是使用Blobstore API

通过这种方式,您可以使用图像 API 即时提供不同尺寸的图像: Transforming images from the Blobstore

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)
于 2013-06-18T17:23:48.417 回答