公开数据

本页面介绍如何将您拥有的对象设为可被公开读取。要了解如何访问公开数据,请参阅访问公开数据

将各个对象设为可被公开读取

要将各个对象设为可被公开读取,请执行以下操作:

Console

  1. 在 Google Cloud Platform Console 中打开 Cloud Storage 浏览器。
    打开 Cloud Storage 浏览器
  2. 在存储分区列表中,找到包含要公开对象的存储分区,点击其名称,然后导航到对象(如果该对象位于子目录中)。

  3. 点击与要公开的对象关联的下拉菜单。

    下拉菜单显示为对象一行最右侧的三个垂直点。

  4. 从下拉菜单中选择修改权限

  5. 在出现的叠加窗口中,点击 + 添加项目按钮。

  6. 为 allUsers 添加权限。

    • 为“实体”选择用户
    • 为“名称”输入 allUsers
    • 为“访问权限”选择读取者
  7. 点击保存

共享公开后,“公共访问权限”列中会显示一个链接图标。您可以点击此图标获取该对象的网址。

gsutil

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

gsutil acl ch -u AllUsers:R gs://[BUCKET_NAME]/[OBJECT_NAME]

如果成功,则响应类似如下示例:

Updated ACL on gs://[BUCKET_NAME]/[OBJECT_NAME]

代码示例

C++

如需了解详情,请参阅 Cloud Storage C++ API 参考文档

namespace gcs = google::cloud::storage;
using ::google::cloud::StatusOr;
[](gcs::Client client, std::string bucket_name, std::string object_name) {
  StatusOr<gcs::ObjectMetadata> updated = client.PatchObject(
      bucket_name, object_name, gcs::ObjectMetadataPatchBuilder(),
      gcs::PredefinedAcl::PublicRead());

  if (!updated) {
    throw std::runtime_error(updated.status().message());
  }

  std::cout << "Object updated. The full metadata after the update is: "
            << *updated << "\n";
}

C#

如需了解详情,请参阅 Cloud Storage C# API 参考文档

private void MakePublic(string bucketName, string objectName)
{
    var storage = StorageClient.Create();
    var storageObject = storage.GetObject(bucketName, objectName);
    storageObject.Acl = storageObject.Acl ?? new List<ObjectAccessControl>();
    storage.UpdateObject(storageObject, new UpdateObjectOptions
    {
        PredefinedAcl = PredefinedObjectAcl.PublicRead
    });
    Console.WriteLine(objectName + " is now public and can be fetched from " +
        storageObject.MediaLink);
}

Go

如需了解详情,请参阅 Cloud Storage Go API 参考文档

acl := client.Bucket(bucket).Object(object).ACL()
if err := acl.Set(ctx, storage.AllUsers, storage.RoleReader); err != nil {
	return err
}

Java

如需了解详情,请参阅 Cloud Storage Java API 参考文档

BlobId blobId = BlobId.of(bucketName, blobName, blobGeneration);
Acl acl = storage.createAcl(blobId, Acl.of(User.ofAllUsers(), Role.READER));

Node.js

如需了解详情,请参阅 Cloud Storage Node.js API 参考文档

// Imports the Google Cloud client library
const {Storage} = require('@google-cloud/storage');

// Creates a client
const storage = new Storage();

/**
 * TODO(developer): Uncomment the following lines before running the sample.
 */
// const bucketName = 'Name of a bucket, e.g. my-bucket';
// const filename = 'File to make public, e.g. file.txt';

// Makes the file public
await storage
  .bucket(bucketName)
  .file(filename)
  .makePublic();

console.log(`gs://${bucketName}/${filename} is now public.`);

PHP

如需了解详情,请参阅 Cloud Storage PHP API 参考文档

use Google\Cloud\Storage\StorageClient;

/**
 * Make an object publically accessible.
 *
 * @param string $bucketName the name of your Cloud Storage bucket.
 * @param string $objectName the name of your Cloud Storage object.
 *
 * @return void
 */
function make_public($bucketName, $objectName)
{
    $storage = new StorageClient();
    $bucket = $storage->bucket($bucketName);
    $object = $bucket->object($objectName);
    $object->update(['acl' => []], ['predefinedAcl' => 'PUBLICREAD']);
    printf('gs://%s/%s is now public' . PHP_EOL, $bucketName, $objectName);
}

Python

如需了解详情,请参阅 Cloud Storage Python API 参考文档

def make_blob_public(bucket_name, blob_name):
    """Makes a blob publicly accessible."""
    storage_client = storage.Client()
    bucket = storage_client.get_bucket(bucket_name)
    blob = bucket.blob(blob_name)

    blob.make_public()

    print('Blob {} is publicly accessible at {}'.format(
        blob.name, blob.public_url))

Ruby

如需了解详情,请参阅 Cloud Storage Ruby API 参考文档

# project_id  = "Your Google Cloud project ID"
# bucket_name = "Your Google Cloud Storage bucket name"
# file_name   = "Name of file in Google Cloud Storage to make public"

require "google/cloud/storage"

storage = Google::Cloud::Storage.new project_id: project_id
bucket  = storage.bucket bucket_name
file    = bucket.file file_name

file.acl.public!

puts "#{file.name} is publicly accessible at #{file.public_url}"

REST API

JSON API

  1. OAuth 2.0 Playground 获取授权访问令牌。将 Playground 配置为使用您自己的 OAuth 凭据。
  2. 创建一个包含以下信息的 .json 文件:
  3. {
    "entity": "allUsers",
    "role": "READER"
    }
  4. 使用 cURL,通过 Insert ACL 请求调用 JSON API,将 [VALUES_IN_BRACKETS] 替换为适当的值:
    curl -X POST --data-binary @[JSON_FILE_NAME].json \
        -H "Authorization: Bearer [OAUTH2_TOKEN]" \
        -H "Content-Type: application/json" \
        "https://www.googleapis.com/storage/v1/b/[BUCKET_NAME]/o/[OBJECT_NAME]/acl"

XML API

  1. OAuth 2.0 Playground 获取授权访问令牌。将 Playground 配置为使用您自己的 OAuth 凭据。
  2. 创建一个包含以下信息的 .xml 文件:
  3. <AccessControlList>
    <Entries>
        <Entry>
          <Scope type="AllUsers"/>
          <Permission>READ</Permission>
        </Entry>
    </Entries>
    </AccessControlList>
    
  4. 使用 cURL,通过 Set Object ACL 请求调用 XML API,将 [VALUES_IN_BRACKETS] 替换为适当的值:
    curl -X PUT --data-binary @[XML_FILE_NAME].xml \
        -H "Authorization: Bearer [OAUTH2_TOKEN]" \
        "https://storage.googleapis.com/[BUCKET_NAME]/[OBJECT_NAME]?acl"

将对象群组设为可被公开读取

要将存储分区中的所有对象设为可被公开读取,请执行以下操作:

Console

  1. 在 Google Cloud Platform Console 中打开 Cloud Storage 浏览器。
    打开 Cloud Storage 浏览器
  2. 在存储分区列表中,点击要公开的存储分区的名称。

  3. 选择页面顶部附近的权限标签。

  4. 点击添加成员按钮。

    随即会显示“添加成员”对话框。

  5. 新成员字段中,输入 allUsers

  6. 角色下拉列表中,选择存储子菜单,然后点击存储对象查看者选项。

  7. 点击保存

共享公开后,“公共访问权限”列中的每个对象会显示一个链接图标。您可以点击此图标获取该对象的网址。

gsutil

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

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

REST API

JSON API

  1. OAuth 2.0 Playground 获取授权访问令牌。将 Playground 配置为使用您自己的 OAuth 凭据。
  2. 创建一个包含以下信息的 .json 文件:
  3. {
      "bindings":[
        {
          "role": "roles/storage.objectViewer",
          "members":["allUsers"]
        }
      ]
    }
  4. 使用 cURL,通过 PUT setIamPolicy 请求调用 JSON API,将 [VALUES_IN_BRACKETS] 替换为适当的值:
    curl -X PUT --data-binary @[JSON_FILE_NAME].json \
        -H "Authorization: Bearer [OAUTH2_TOKEN]" \
        -H "Content-Type: application/json" \
        "https://www.googleapis.com/storage/v1/b/[BUCKET_NAME]/iam"

XML API

XML API 不支持将存储分区中的所有对象设为可被公开读取。请改用 gsutil 或 JSON API。

后续步骤

此页内容是否有用?请给出您的反馈和评价:

发送以下问题的反馈:

此网页
Cloud Storage
需要帮助?请访问我们的支持页面