我有一个流程可以从给定的网址中提取图片并将其保存到Google云端存储并检索服务网址.现在,我的理解(从我读过的文档中)是我还必须在引用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_appserver上引发此错误?好像密钥首先没有生成...
正如我在代码中所评论的那样,当我打印blobstore_key
之前blobstore.get(blobstore_key).key()
打印时,它会打印出一个键,所以它一直工作到那里.问题是,大概是,当我打电话blobstore.get()
给钥匙时,它会None
......为什么???
或者我做错了什么?谢谢!
blobstore.get()
是该词的同义词BlobInfo.get()
,此页面上的注释说:
但是,BlobInfo对象当前不适用于GCS对象.
这可以解释为什么你的blobstore.get()
回报None
.
另外,您不期望从这两行获得相同的结果吗?
blobstore_key = blobstore.create_gs_key(blobstore_filename) blobstore_key = blobstore.get(blobstore_key).key()