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

ABr*_*m K 11 google-cloud-storage

我正在使用Google Cloud Storage为我的Google App Engine应用程序存储图像,而我正在尝试访问这些图像:

<img src="https://storage.googleapis.com/BUCKET_NAME/IMAGE_NAME">
Run Code Online (Sandbox Code Playgroud)

但是,这会显示"拒绝访问"或向我显示Google登录提示.然后我尝试使用签名URL授予客户端访问权限.

我生成了要签名的URL,如下所示:

String HTTP_Verb = "GET";
String Expiration = "1361993085";
String Canonicalized_Resource = "/bucket_name/sub_directory";
String stringToSign = HTTP_Verb + "\n" + Expiration + "\n" + Canonicalized_Resource;
Run Code Online (Sandbox Code Playgroud)

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

The request signature we calculated does not match the signature you provided. Check your Google secret key and signing method.
Run Code Online (Sandbox Code Playgroud)

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

ABr*_*m K 18

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

gsutil -m acl -r set public-read gs://BUCKET_NAME
Run Code Online (Sandbox Code Playgroud)

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

gsutil -m defacl set public-read gs://BUCKET_NAME
Run Code Online (Sandbox Code Playgroud)

希望它可以帮到某人!

感谢@kctang!


Bar*_*row 8

gsutil 已更新,您现在需要做:

gsutil -m acl -r set public-read gs://bucket-name
gsutil -m defacl set public-read gs://bucket-name
Run Code Online (Sandbox Code Playgroud)

PS对于不熟悉的人gsutil,这里是如何安装它.


Rya*_*ase 5

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

https://console.cloud.google.com/storage/browser/[BUCKET_NAME]/

例如,如果您尝试访问的存储桶是 Landsat 公共数据集,gs://gcp-public-data-landsat/那么您将使用以下 url 访问存储桶:https://console.cloud.google.com/storage/gcp-public-data-landsat/

以下是与访问存储桶相关的文档:

  1. https://cloud.google.com/storage/docs/access-public-data
  2. https://cloud.google.com/storage/docs/cloud-console

希望这可以帮助!


归档时间:

查看次数:

6729 次

最近记录:

8 年,1 月 前