通过签名的URL上传到Google Cloud Storage-对象不公开

问题描述 投票:1回答:1

我遵循了教程,以允许使用签名的URL将文件从GWT前端直接上传到Google Cloud Storage。 我通过指定可以正常工作的内容类型扩展了Java示例。 然后,我看到以这种方式上传的文件不公开可读。 为了使这个工作,我尝试了:

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

我的假设是,也许我正在使用的扩展头是错误的? 然后,根据文档,默认情况下,所有对GCS进行身份验证的请求都会应用private ACL。

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

我做错了什么? 如何让任何人公开阅读它们?

感谢您的建议!

google-cloud-storage acl pre-signed-url
1个回答
0
投票

我认为,如果您阅读了给定的文档 。 明确提到,如果您需要用户不使用Google帐户就下载对象,则此方法会为用户提供在特定时间分配的URL,以供用户下载对象。 我假设这是不可能的,因为这些对象已签名,因此无法公开提供。 如果仍然需要该功能,我建议您进行对象的可恢复上传或简单上传。

另外,请尝试将您的项目服务帐户作为所有者放入存储区名称右侧的开发人员控制台中的“编辑对象的默认权限”中。

© www.soinside.com 2019 - 2024. All rights reserved.