1

我跟进了教程,允许使用签名 URL 将文件从 GWT 前端直接上传到 Google Cloud Storage。我通过指定工作得很好的内容类型扩展了 Java 示例。然后,我看到以这种方式上传的文件无法公开阅读。为了让这个工作我试过:

  • 我已经为新上传的对象设置了默认 ACL gsutil defacl set public-read gs://<bucket>。再次上传文件 - 不走运,仍然不可见。
  • 然后尝试直接在该对象上设置 ACL,gsutil acl set public-read gs://<bucket>/<file>但它给了我AccessDeniedException: 403 Forbidden。这是有道理的,因为 gsutil 使用我的 Google 帐户进行了身份验证,并且使用服务帐户创建了签名 URL,并且它是 P12 密钥。
  • 我尝试在上传阶段设置 ACL,因此添加了"x-goog-acl:public-read\n"规范化扩展标头和适当的查询字符串参数以通过签名检查。该死的,还是没有运气!

我的假设是我使用的这个扩展头可能是错误的?然后根据文档private,默认情况下,所有经过身份验证的 GCS 请求都将应用 ACL。

无论如何 - 为什么当我以项目所有者身份登录时,我无法从 Google 控制台公开读取这些文件?我可以为通过控制台上传的所有文件这样做(我知道在这种情况下所有者是项目所有者而不是服务帐户)。

我做错了什么?我怎样才能让任何人都可以公开阅读它们?

谢谢指教!

4

1 回答 1

0

我想如果你浏览了给定的文档。它明确提到,如果您需要用户在不使用 google 帐户的情况下下载对象,则此方法会为用户提供特定时间的分配 URL 以下载对象。我假设这些对象在签名后可能无法公开使用。如果您仍然需要该功能,我建议您通过对象的可恢复上传或简单上传。

也可以尝试将你项目的服务账号作为所有者,在你的bucket名称右侧的开发者控制台的“Edit default permission of Object”中。

于 2015-05-05T23:43:56.507 回答