通过签名 URL 上传到 Google 云存储 - object 不可公开读取
Upload to Google Cloud Storage via signed URL - object not publicly readable
我遵循了 this 教程,允许使用签名的 URL 将文件从 GWT 前端直接上传到 Google 云存储。我通过指定工作正常的内容类型扩展了 Java 示例。然后,我看到以这种方式上传的文件不可公开阅读。为了让这个工作我试过:
- 我已经为新上传的 object 设置了默认 ACL
gsutil defacl set public-read gs://<bucket>
。再次上传文件 - 失败,仍然不可见。
- 然后尝试直接在 object 上设置 ACL
gsutil acl set public-read gs://<bucket>/<file>
但它给了我 AccessDeniedException: 403 Forbidden。这是有道理的,因为 gsutil 使用我的 Google 帐户进行身份验证并使用服务帐户创建签名 URL 并且它是 P12 密钥。
- 我尝试在上传阶段设置 ACL,因此添加了
"x-goog-acl:public-read\n"
规范化扩展 headers 和适当的查询字符串参数以通过签名检查。妈的,还是不走运!
我的假设是我使用的这个扩展 header 可能是错误的?然后根据文档,所有经过身份验证的 GCS 请求将默认应用 private
ACL。
无论如何 - 为什么我无法在 Google 控制台以项目所有者身份登录时公开读取这些文件?我可以为通过控制台上传的所有文件这样做(我知道在那种情况下所有者是项目所有者而不是服务帐户)。
我做错了什么?我怎样才能让任何人都可以公开阅读它们?
多谢指教!
我想如果你完成了给定的docs。它清楚地提到,如果您需要用户在不使用 google 帐户的情况下下载对象,那么此方法会为用户提供特定时间的分配 URL 以下载对象。我假设可能无法在签名时公开这些对象。如果您仍然需要该功能,我建议您完成对象的可恢复上传或简单上传。
同时尝试将您项目的服务帐户作为所有者放入开发者控制台中存储桶名称右侧的 "Edit default permission of Object"。
我遵循了 this 教程,允许使用签名的 URL 将文件从 GWT 前端直接上传到 Google 云存储。我通过指定工作正常的内容类型扩展了 Java 示例。然后,我看到以这种方式上传的文件不可公开阅读。为了让这个工作我试过:
- 我已经为新上传的 object 设置了默认 ACL
gsutil defacl set public-read gs://<bucket>
。再次上传文件 - 失败,仍然不可见。 - 然后尝试直接在 object 上设置 ACL
gsutil acl set public-read gs://<bucket>/<file>
但它给了我 AccessDeniedException: 403 Forbidden。这是有道理的,因为 gsutil 使用我的 Google 帐户进行身份验证并使用服务帐户创建签名 URL 并且它是 P12 密钥。 - 我尝试在上传阶段设置 ACL,因此添加了
"x-goog-acl:public-read\n"
规范化扩展 headers 和适当的查询字符串参数以通过签名检查。妈的,还是不走运!
我的假设是我使用的这个扩展 header 可能是错误的?然后根据文档,所有经过身份验证的 GCS 请求将默认应用 private
ACL。
无论如何 - 为什么我无法在 Google 控制台以项目所有者身份登录时公开读取这些文件?我可以为通过控制台上传的所有文件这样做(我知道在那种情况下所有者是项目所有者而不是服务帐户)。
我做错了什么?我怎样才能让任何人都可以公开阅读它们?
多谢指教!
我想如果你完成了给定的docs。它清楚地提到,如果您需要用户在不使用 google 帐户的情况下下载对象,那么此方法会为用户提供特定时间的分配 URL 以下载对象。我假设可能无法在签名时公开这些对象。如果您仍然需要该功能,我建议您完成对象的可恢复上传或简单上传。
同时尝试将您项目的服务帐户作为所有者放入开发者控制台中存储桶名称右侧的 "Edit default permission of Object"。