【问题标题】:Google Cloud Storage - How to retrieve a file's owner via Python?Google Cloud Storage - 如何通过 Python 检索文件的所有者?
【发布时间】:2021-07-06 16:51:24
【问题描述】:

我正在尝试通过 Python 官方客户端 (google-cloud-storage) 访问上传到 Google Cloud Storage 存储桶上的 blob。 我正在设法检索文件的所有者(上传文件的人),但我在互联网上找不到有用的东西。

我尝试过将客户端与以下内容一起使用:

client(project='project').get_bucket('bucket').get_blob('blob')

但是像“所有者”这样的 blob 属性是空的!

所以我尝试使用云函数并访问事件和上下文。 在 Google 文档 (https://cloud.google.com/storage/docs/json_api/v1/objects#resource) 中,它报告了一个事件的结构,它似乎具有所有者的所有权。但是当我打印或尝试访问它时,我收到一个错误,因为它没有设置。

有人可以帮助我吗?我只需要用户的电子邮件...提前谢谢!

编辑:

这似乎不是权限错误,因为我从谷歌站点获得了测试 API 的正确结果:https://cloud.google.com/storage/docs/json_api/v1/objects/get?apix_params=%7B%22bucket%22%3A%22w3-dp-prod-technical-accounts%22%2C%22object%22%3A%22datagovernance.pw%22%2C%22projection%22%3A%22full%22%7D

【问题讨论】:

  • 您用于检索对象元数据的帐户是否具有足够/正确的权限?
  • 嗨,是的,我刚刚验证过并且我拥有正确的权限,事实上,如果我使用描述中的链接测试 Google API,我会获得所有元数据,甚至是所有者
  • 只是为了确保您使用的是同一个用户,对吗?还有任何关联的元数据或所有元数据都是空的吗?

标签: python rest google-cloud-platform google-cloud-storage


【解决方案1】:

默认情况下,get_blob 不会获取所有者和 ACL。您必须明确获取此信息:

blob = client(project='project').get_bucket('bucket').get_blob('blob')
blob.reload(projection='full')

请注意,如果您使用uniform bucket-level ACLs,则所有者没有任何意义,即使进行上述更改也会取消设置。

编辑:这实际上不是最有效的选择,因为它对 GCS 进行了额外的不必要调用。最有效的选择是:

blob = Blob('bucket', 'blob')
blob.reload(projection='full', client=client)

【讨论】:

  • 非常感谢,这解决了我的问题!
猜你喜欢
  • 2015-11-16
  • 1970-01-01
  • 2016-08-19
  • 2015-08-28
  • 1970-01-01
  • 2021-06-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多