python - 如何从 python 谷歌云函数访问文件元数据,用于谷歌云存储中的文件
问题描述
我正在尝试从 Cloud Function 中访问 Google 云存储中文件上的自定义元数据,但它总是返回“None”。
该文件肯定有自定义元数据 - 可以从 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
只返回存储对象的自定义元数据(一个字典)。None
表示没有自定义元数据。请参阅以下文档metadata
:
检索对象的任意/应用程序特定元数据。
用户提供的元数据,键/值对。
请注意,自定义元数据与固定键元数据不同,您也可以使用Google Cloud Console 中的编辑元数据按钮进行编辑。固定键元数据包含:
- 内容类型
- 内容编码
- 内容处置
- 内容-语言
- 缓存控制
这种特殊类型的元数据可以通过blob.content_type
, blob.content_encoding
, ... 访问(查看完整示例)。
要添加自定义元数据,只需单击同一窗口上的添加项目按钮(编辑元数据)或使用gsutil
(请参阅编辑对象元数据文档):
gsutil setmeta -h "x-goog-meta-examplekey:examplevalue" gs://<your-bucket>
推荐阅读
- php - 如何通过条件转换数据从数据库中提取数据?
- c# - 从 .NET 框架 4.0 创建 Nuget 包
- angular - 为什么基于 Angular 可观察的 SseService 只工作一次,接收事件但产生第一个
- python - 如何从同一目录中导入整个模块
- c# - 如何从 .net 中的 MySql 过程中选择输出参数
- javascript - jQuery - onClick td hightligh 所有行上方和下方的所有 td
- javascript - 文本字段中的默认值,但只是第一次
- node.js - Amazon Lex 和 Amazon Lambda 帮助冰淇淋店
- excel - 循环遍历 Dv(当 h > a 时更改单元格)
- javascript - 输入正确的会话名称和密码后,响应为“空”