我跟进了本教程,允许使用签名 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 控制台公开读取这些文件?我可以为通过控制台上传的所有文件这样做(我知道在这种情况下所有者是项目所有者而不是服务帐户)。
我做错了什么?我怎样才能让任何人都可以公开阅读它们?
谢谢指教!