繁体   English   中英

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

[英]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_typeblob.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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM