[英]How to access file metadata, for files in google cloud storage, from a python google cloud function
我正在尝试从云函数中访问 Google 云存储中文件的自定义元数据,但它始终返回“无”。
该文件肯定有自定义元数据——自定义元数据可以从 GCS 浏览器中看到。
如果我在云 shell 环境中运行我的代码,我可以成功访问自定义元数据。
但是,如果我在云函数中运行相同的代码,则返回的 blob.metadata 始终为“无”。
我究竟做错了什么? 与 Cloud Shell 相比,我在 Cloud Function 中需要做什么不同的事情。
from google.cloud import storage
client = storage.Client()
bucket = client.bucket(<my bucket name>)
blob = bucket.get_blob(<my filename>)
metadata = blob.metadata
另请注意, blob.download_as_string() 正确获取文件内容 - 这只是我无法获取的自定义元数据。
blob.metadata
只返回 Storage 对象的自定义元数据(字典)。 None
表示没有自定义元数据。 请参阅metadata
的文档:
检索对象的任意/特定于应用程序的元数据。
Object
资源 (API)的文档指定metadata
是:
用户提供的元数据,以键/值对的形式。
请注意,自定义元数据与固定键元数据不同,您也可以使用 Google Cloud Console 中的“编辑元数据”按钮进行编辑。 固定键元数据包含:
这种特殊类型的元数据可以通过blob.content_type
、 blob.content_encoding
访问(查看完整示例)。
要添加自定义元数据,只需单击同一窗口上的添加项目按钮(编辑元数据)或使用gsutil
(请参阅编辑对象元数据文档):
gsutil setmeta -h "x-goog-meta-examplekey:examplevalue" gs://<your-bucket>
实际上 blob.metadata 不会显示用户元数据,您必须添加 blob.patch() 并且元数据将出现在 blob.metadata 变量中
from google.cloud import storage
client = storage.Client()
bucket = client.bucket(<my bucket name>)
blob = bucket.get_blob(<my filename>)
blob.patch()
metadata = blob.metadata
要保存用户元数据,可以设置 blob.metadata 然后调用 blob.patch 添加或修改元数据,或调用 blob.update 删除此 blob 的用户元数据
使用blob.get_metadata
,而不是blob.metadata
从docs来看, blob.metadata
不会发出 HTTP 请求。
我遇到了同样的问题。 但就我而言,每当在存储桶中创建对象时,我都会有一个触发器来运行云函数。 我还需要使用您使用的代码获取元数据,但它也返回 None 。
然后我将触发器更改为google.storage.object.metadataUpdate
,因此每当我设置或更新对象的元数据时,我的云函数都会触发。 通过这样做,我可以使用相同的代码获取元数据。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.