如何从 python 谷歌云函数访问谷歌云存储中的文件元数据

tim*_*all 5 python google-cloud-storage google-cloud-functions

我试图从云函数中访问 Google 云存储中文件的自定义元数据,但它始终返回“无”。

  • 该文件肯定有自定义元数据 - 可以从 GCS 浏览器中看到自定义元数据。

  • 如果我在 Cloud shell 环境中运行代码,我可以成功访问自定义元数据。

  • 但如果我在云函数中运行相同的代码,则返回的 blob.metadata 始终为“None”。

我究竟做错了什么?与 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
Run Code Online (Sandbox Code Playgroud)

另请注意, blob.download_as_string() 正确获取了文件内容 - 这只是我无法获取的自定义元数据。

nor*_*bjd 5

blob.metadata仅返回存储对象的自定义元数据(字典)。None意味着没有自定义元数据。请参阅以下文档metadata

检索对象的任意/应用程序特定元数据。

资源(API)的文档Object指定为metadata

用户提供的元数据,以键/值对的形式。

请注意,自定义元数据与固定键元数据不同,您也可以使用Google Cloud Console 中的“编辑元数据”按钮进行编辑。固定密钥元数据包含:

  • 内容类型
  • 内容编码
  • 内容处置
  • 内容语言
  • 缓存控制

blob.content_type这种特殊类型的元数据可以通过, blob.content_encoding, ...访问(查看完整示例)。

要添加自定义元数据,只需单击同一窗口上的添加项目按钮(编辑元数据)或使用gsutil(请参阅编辑对象元数据文档):

gsutil setmeta -h "x-goog-meta-examplekey:examplevalue" gs://<your-bucket>
Run Code Online (Sandbox Code Playgroud)