如何将 Google Cloud Storage 对象设置为在通过签名 URL 上传时公开可见?

如何将 Google Cloud Storage 对象设置为在通过签名 URL 上传时公开可见?

我正在跟进指南并提出解决方案,即使用签名的 URL 和 XML REST API(例如)将对象上传到 Google Cloud 存储。curl -v -X POST $URL -F "[email protected]"

不幸的是,我不知道如何在这些对象上设置 ACL,以便它们公开可见。我尝试使用x-goog-acl标头(以及签名 URL 和请求标头中的各种大写字母)和acl查询参数,但没有成功。

我认为这一定是可能的,因为它在 API 文档中被引用,并且所有客户端库都允许您这样做。我感觉我的 URL 签名方法搞砸了(即使标头出现在签名的 URL 中:)https://storage.googleapis.com/foo/test.jpg?X-Goog-Algorithm=GOOG4-RSA-SHA256&X-Goog-Credential=STUFF&X-Goog-SignedHeaders=host%3Bx-goog-acl&acl=public-read&MORE-STUFF,但我有点不知所措。

答案1

如果我理解正确的话,您希望使用 XML REST API 上传您的对象,并且希望任何人都可以公开访问该对象。

为此,您可以按照指示上传您的对象。要使用文件而不是数据二进制文件,只需将其替换--data-binary @[OBJECT]-T [PATH_TO_FILE]。完成此操作后,要将对象公开,您需要按照这些步骤这样做将使您的对象始终可供任何人访问,并且您不需要将签名的 URL 用于其他任何操作。

另一方面,如果你想要授予任何人在有限时间内访问某个对象的权限,那么你需要生成该权限签名的 URL,这就是您提到的指南所做的。

编辑

我认为我已经让它按照你想要的方式工作了。首先,你需要修改教程中的代码,添加另一个查询参数:

query_parameters['X-Goog-Acl'] = 'public-read'

现在,您可以使用所需的参数运行 Python 代码(使用方法PUT),并使用带有签名 URL 的另一个 PUT,如下所示:

curl -v -X PUT $SIGNED_URL -T "[PATH_TO_FILE]" -H "content-type:text/plain" -H "x-goog-acl:public-read"

在我的示例中,我正在创建签名的 URL 来上传纯文本文件。

我已广泛尝试过并且它有效。

相关内容