您如何在Google云端存储中公开许多文件?


78

我在Google Cloud Storage中有1000个文件要公开,或者一般来说是目录层次结构。

在Web UI中,我似乎一次只能公开一个。

有某种方法可以做到这一点。


1
我找到了。您可以运行:gsutil ls以获得文件列表。然后,您可以使用gsutil setacl public-read *将清单通过管道传递到xargs。您也可以将gsutil setdefacl设为公开读取,以便将来上传的文件成为公开文件
Engineerchuan

Answers:


103

gsutil -m acl set -R -a public-read gs://bucket

  • 同时-m发出多个请求。
  • 这些-R问题要求您存储桶中的每个对象。
  • -a问题要求为每个对象的每个版本。

请参阅gsutil help acl以获取更多信息。

在API层,gsutil发出以下HTTP请求:

PUT /bucket/obj?acl HTTP/1.1
Host: storage.googleapis.com
x-goog-acl: public-read

您可以通过将-D标志与结合使用来查看gsutil

gsutil -D setacl public-read gs://bucket/obj

谢谢你!当前文档显示'gsutil acl set public-gs:// bucket / object'。这是从'setacl'到'acl set'的更新语法吗?(developers.google.com/storage/docs/gsutil/commands/acl#set)–
皮埃尔·布劳茨

预定义的ACL列表(私有,公开阅读等):cloud.google.com/storage/docs/access-control
ruhong 2016年

我尝试了acl策略,并且更新后的文件仅恢复为不共享:(
Darian311

57

运行时:gsutil -m acl set -R -a public-read gs://bucket为存储桶中当前所有对象定义公共读取,但是在上载新文件时,默认情况下它们将不是公共的。

我发现值得将存储桶默认acl定义为public-read gsutil defacl set public-read gs://bucket


2
好主意。不幸的是,这仅适用于顶级存储桶,而不能用于存储桶中的文件夹。另一个答案甚至适用于文件夹。
Plasty Grove

6
gsutil defacl set public-read gs://bucket适用于所有将来的文件,包括子目录中的文件。忽略Plastly Grove的评论。
2016年

48

您可以将存储桶中的所有对象设为公开。这是链接

  1. 在Google Cloud Platform Console中打开Cloud Storage浏览器。
  2. 在存储桶列表中,单击要公开的存储桶的名称。
  3. 选择页面顶部附近的“权限”标签。
  4. 单击添加成员按钮。
    出现“添加成员”对话框。
  5. 在成员字段中,输入allUsers。
  6. 在“角色”下拉列表中,选择“存储”子菜单,然后单击“存储对象查看器”选项。
  7. 单击添加。

公开共享后,公共访问>列中的每个对象都会显示一个链接图标。您可以单击此图标来获取对象的URL。


1
伙计们,这看起来像答案。我刚刚测试了我的存储桶权限。我更改了图片并重新上传,并且Google Storage没有像运行此命令之前那样弄乱权限:gsutil iam ch allUsers:objectViewer gs:// [BUCKET_NAME]。以防万一,您想知道亚马逊仍然在使这种事情变得简单方面处于领先地位。哇,太多的学习曲线无法在GS上做到。
Darian311 '17

1
这应该是正确的答案,因为如果您不知道自己在做什么,使用gsutil可能会产生意想不到的效果。
多年生的

13

实现此目的的最简单方法是使用控制台。

点击“编辑存储桶权限”

在此处输入图片说明

输入allUsers添加成员。然后Select Role> Storage>Storage Object Viewer

注意!这将向互联网上的所有人授予对该选定存储桶中所有对象的读取权限。

在此处输入图片说明


1
感谢您提供屏幕截图,它真的很有帮助。
GusDeCooL

11

此处找到的有关托管静态网站的当前文档(2017年10月)指向:

gsutil acl ch -r -u AllUsers:R gs://bucket-name

-r递归技巧在哪里,并-u AllUsers:R提供给公众读取权限。


2
这也适用于子目录,例如gsutil acl ch -r -u AllUsers:R gs://bucket-name/dir-name
Ville

1
如果该目录中有很多文件,则-mgsutil -m acl ch -r -u AllUsers:R gs://bucket-name/dir-name
MikeHoss

1

以Erik的名义复制和粘贴,这对我来说一直有效:

使对象组公开可读

要使存储桶中的所有对象公开可见:

CONSOLEGSUTILREST APIS使用gsutil iam ch命令,将[VALUES_IN_BRACKETS]替换为适当的值:

 gsutil iam ch allUsers:objectViewer gs://[BUCKET_NAME]
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.