我有一个从给定网址获取图像并将其保存到 Google Cloud Storage 并检索服务网址的过程。现在,我的理解(根据我读过的文档)是我还必须在引用 GCS 文件的过程中创建一个 blob。如果我的理解不正确,请告诉我。
获取图像并尝试保存它的处理程序是:
img_request = urlfetch.fetch(img_url)
if img_request.status_code == 200:
img_title = hashlib.sha1(img_url).hexdigest()
img_content = img_request.content
img_type = img_request.headers['content-type']
cloud_storage_filename = '/images/%s/%s' % (self.source_name, img_title)
blobstore_filename = '/gs%s' % cloud_storage_filename
blobstore_key = blobstore.create_gs_key(blobstore_filename)
cloud_storage_file = gcs.open(filename=cloud_storage_filename, mode='w', content_type=img_type)
cloud_storage_file.write(img_content)
cloud_storage_file.close()
# If I print blobstore_key at this stage, I am getting a result here.
blobstore_key = blobstore.get(blobstore_key).key()
blobstore_serving_url = images.get_serving_url(blobstore_key)
# Structured Property to be part of a Datastore Model
img_model = data_model.Image(
s_source_url = img_url,
k_blob_key = blobstore_key,
s_serving_url = blobstore_serving_url
)
return img_model
这在 dev_appserver 上工作正常,但是,在生产中它会引发以下错误:
blobstore_key = blobstore.get(blobstore_key).key()
AttributeError: 'NoneType' object has no attribute 'key'
为什么这个错误是在生产中而不是在 dev_app 服务器上出现的?好像一开始就没有生成 key ...
正如我在代码中评论的那样,当我在调用 blobstore.get(blobstore_key).key()
之前打印 blobstore_key
时,它会打印出一个 key ,所以它一直工作到那里。问题大概是,当我在键上调用 blobstore.get()
时,它得到 None
... 为什么???
还是我做错了什么? 谢谢!
最佳答案
blobstore.get()
是 BlobInfo.get()
的同义词,关于 this 的注释页面说:
However, BlobInfo objects are currently not available for GCS objects.
这可以解释为什么您的 blobstore.get()
返回 None
。
此外,您不希望从这两行中收到相同的结果吗?
blobstore_key = blobstore.create_gs_key(blobstore_filename)
blobstore_key = blobstore.get(blobstore_key).key()
关于google-app-engine - 生产中的 Blobstore 不会获取 BlobKey(而在 dev_appserver 中会获取),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20828265/