【问题标题】:How do you make many files public in Google Cloud Storage?如何在 Google Cloud Storage 中公开许多文件?
【发布时间】:2013-01-17 02:42:45
【问题描述】:

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

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

有没有办法做到这一点。

【问题讨论】:

  • 我找到了。您可以运行: gsutil ls 来获取文件列表。然后,您可以使用 gsutil setacl public-read * 将列表导入 xargs。您还可以执行 gsutil setdefacl public-read 以便将来上传的文件公开

标签: cloud google-cloud-storage


【解决方案1】:

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

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

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

【讨论】:

  • 伙计们,这看起来像是答案。我刚刚测试了我的存储桶权限。我更改了图像并重新上传,Google 存储并没有像我运行此命令之前那样搞砸权限:gsutil iam ch allUsers:objectViewer gs://[BUCKET_NAME]。以防万一您想知道亚马逊仍然在使这样的事情变得简单方面处于领先地位。哇,在 GS 上做同样的事情的学习曲线太长了。
  • 这应该是正确的答案,因为如果您不知道自己在做什么,使用 gsutil 可能会产生意想不到的影响。
【解决方案2】:

运行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

【讨论】:

【解决方案3】:

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

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

-r 执行递归技巧,-u AllUsers:R 提供公共读取访问权限。

【讨论】:

  • 这也适用于子目录,例如gsutil acl ch -r -u AllUsers:R gs://bucket-name/dir-name
  • 如果该目录有很多文件,则添加-m 将使其在 -- gsutil -m acl ch -r -u AllUsers:R gs://bucket-name/dir-name 之后
【解决方案4】:

最简单的方法是使用控制台。

点击“编辑存储桶权限”

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

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

【讨论】:

  • 感谢您提供截图,它真的很有帮助。
【解决方案5】:

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

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

【讨论】:

  • 好主意。不幸的是,这只适用于顶级存储桶,不能用于存储桶中的文件夹。另一个答案甚至适用于文件夹。
  • gsutil defacl set public-read gs://bucket 适用于所有未来的文件,包括子目录中的文件。忽略 Plastly Grove 的评论。
【解决方案6】:

您可以将所有对象都放在公共范围内,此链接有更多信息:https://cloud.google.com/storage/docs/access-control/making-data-public

如果您无法在控制台中登录您的存储桶并单击“编辑存储桶权限” - 在添加成员中输入 allUsers。然后选择角色 > 存储 > 存储对象查看器

【讨论】:

    【解决方案7】:

    代表 Erik 复制和粘贴,这对我来说一直有效:

    使对象组公开可读

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

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

     gsutil iam ch allUsers:objectViewer gs://[BUCKET_NAME]
    

    【讨论】:

      猜你喜欢
      • 2014-11-14
      • 1970-01-01
      • 2018-07-18
      • 1970-01-01
      • 1970-01-01
      • 2021-12-23
      • 1970-01-01
      • 2014-03-02
      • 1970-01-01
      相关资源
      最近更新 更多