如何从浏览器访问Google Cloud Storage存储桶中的文件?

时间:2013-11-21 12:28:36

标签: google-cloud-storage

我正在使用Google云端存储来存储我的Google App Engine应用程序的图像,而我正试图访问这些图像:

<img src="https://storage.googleapis.com/BUCKET_NAME/IMAGE_NAME">

但是,这会显示“拒绝访问”或向我显示Google登录提示。 然后我尝试使用Signed URLs授予客户端访问权限。

我按如下方式生成了要签名的网址:

String HTTP_Verb = "GET";
String Expiration = "1361993085";
String Canonicalized_Resource = "/bucket_name/sub_directory";
String stringToSign = HTTP_Verb + "\n" + Expiration + "\n" + Canonicalized_Resource;

然后用p12文件生成Base64并使用Java编译,但是我收到了这个错误:

The request signature we calculated does not match the signature you provided. Check your Google secret key and signing method.

我在这里做错了什么?有没有办法可以在没有身份验证的情况下从GCS访问图像?

4 个答案:

答案 0 :(得分:16)

最后2天后,让它运转起来。答案是: 我的方法是错误,不需要签名网址。我需要将我的存储桶添加为公共读取,以便我可以从浏览器请求中读取它。就这样。 打开gsutil,输入:

gsutil -m acl -r set public-read gs://BUCKET_NAME

并将其设置为所有未来上传的默认值

gsutil -m defacl set public-read gs://BUCKET_NAME
希望它对某人有帮助!

感谢@kctang!

答案 1 :(得分:7)

gsutil已更新,您现在需要执行以下操作:

gsutil -m acl -r set public-read gs://bucket-name
gsutil -m defacl set public-read gs://bucket-name

P.S。对于不熟悉gsutilhere is how to install it

的人

答案 2 :(得分:1)

您错过了string to be signed中的content-md5和content-type字段。它们可以为空,但您仍需要\n个分隔符。有关构造要签名的字符串的工作示例,请参阅this question

答案 3 :(得分:0)

有关更一般的答案,访问gs:// url的方法是使用以下格式:

Cannot read property 'name' of undefined

例如,如果您尝试访问的存储分区是Landsat公共数据集https://console.cloud.google.com/storage/browser/[BUCKET_NAME]/,那么您可以使用此网址访问存储分区:gs://gcp-public-data-landsat/

这里是与访问存储桶相关的文档:

  1. https://cloud.google.com/storage/docs/access-public-data
  2. https://cloud.google.com/storage/docs/cloud-console
  3. 希望这有帮助!