2013-06-18 28 views
2

嘗試創建將從GAE Datastore提供圖像的腳本時出現此錯誤。BadKeyError:無效的字符串鍵

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) 

這個類是從image documentation在GAE

+1

爲什麼不你建議使用'webapp2.RequestHandler'嗎?另外,在你的模板中你使用了'key = {{the_key}}',''''周圍有空格嗎?如果是的話,刪除它們。或者向我們展示生成該鍵的視圖/模板/ url –

+1

您尚未顯示如何生成您在請求中傳遞的「id」值。 –

+0

@SamueleMattiuzzo MainHandler類繼承自webapp2.RequestHandler類。 –

回答

4

5066549580791808創建不是關鍵,它是一個ID。

您需要使用SomeModel.get(),db.get()需要整個密鑰,其中包括模型和路徑。

+0

非常感謝!就是這樣! –

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) 
相關問題