使用请求者付款

本页面介绍如何设置请求者付款功能,并通过相关示例说明如何对启用了请求者付款功能的存储分区发起请求。有关此功能的说明,请参阅请求者付款

设置请求者付款

以下部分介绍如何启用和停用请求者付款功能,以及如何检查存储分区是否启用了请求者付款功能。

前提条件

  1. 您应该具有 storage.buckets.get 权限,该权限允许您获取存储分区的请求者付款状态。另外,使用 Google Cloud Platform Console 或 gsutil 启用和停用请求者付款功能时也需要该权限。

  2. 启用或停用请求者付款功能时,您必须具有 storage.buckets.update 权限。

  3. 停用请求者付款功能时,您必须在请求中包含结算项目,或者具有 resourcemanager.projects.createBillingAssignment 权限。如需了解详情,请参阅请求者付款使用和访问要求

权限通过角色被授予用户。例如,具有 roles/storage.admin 角色的用户拥有以上所有 storage.buckets 权限。可以将角色添加到包含该存储分区的项目

启用请求者付款功能

要为存储分区启用请求者付款功能,请按如下所述操作:

Console

  1. 在 Google Cloud Platform Console 中打开 Cloud Storage 浏览器。
    打开 Cloud Storage 浏览器
  2. 在存储分区列表中,找到要启用的存储分区,然后点击请求者付款列中的关闭按钮。

  3. 在随即显示的窗口中,点击启用

此功能启用后,相应存储分区对应的请求者付款列中会显示一个绿色气泡和一个开启按钮。

gsutil

使用 gsutil requesterpays set on 命令,将 [VALUES_IN_BRACKETS] 替换为适当的值:

gsutil requesterpays set on gs://[BUCKET_NAME]

代码示例

C++

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

namespace gcs = google::cloud::storage;
using ::google::cloud::StatusOr;
[](gcs::Client client, std::string bucket_name) {
  StatusOr<gcs::BucketMetadata> bucket_metadata = client.PatchBucket(
      bucket_name,
      gcs::BucketMetadataPatchBuilder().SetBilling(gcs::BucketBilling{true}));

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

  std::cout << "Billing configuration for bucket " << bucket_metadata->name()
            << " is updated. The bucket now";
  if (!bucket_metadata->has_billing()) {
    std::cout << " has no billing configuration.\n";
  } else if (bucket_metadata->billing().requester_pays) {
    std::cout << " is configured to charge the caller for requests\n";
  } else {
    std::cout << " is configured to charge the project that owns the bucket"
              << " for requests.\n";
  }
}

C#

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

void EnableRequesterPays(string bucketName)
{
    var storage = StorageClient.Create();
    var bucket = storage.GetBucket(bucketName, new GetBucketOptions()
    {
        UserProject = s_projectId
    });
    bucket.Billing = bucket.Billing ?? new Bucket.BillingData();
    bucket.Billing.RequesterPays = true;
    bucket = storage.UpdateBucket(bucket, new UpdateBucketOptions()
    {
        // Use IfMetagenerationMatch to avoid race conditions.
        IfMetagenerationMatch = bucket.Metageneration,
        UserProject = s_projectId
    });
}

Go

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

bucket := c.Bucket(bucketName)
bucketAttrsToUpdate := storage.BucketAttrsToUpdate{
	RequesterPays: true,
}
if _, err := bucket.Update(ctx, bucketAttrsToUpdate); err != nil {
	return err
}

Java

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

// Instantiate a Google Cloud Storage client
Storage storage = StorageOptions.getDefaultInstance().getService();

// The name of the existing bucket to enable requester-paying for, e.g. "my-bucket"
// String bucketName = "my-bucket"
BucketInfo bucketInfo = BucketInfo.newBuilder(bucketName).setRequesterPays(true).build();

// Update the bucket, throws StorageException on failure
Bucket bucket = storage.update(bucketInfo);

System.out.println("Requester pay status for " + bucketName + ": " + bucket.requesterPays());

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 line before running the sample.
 */
// const bucketName = 'Name of a bucket, e.g. my-bucket';

// Enables requester-pays requests
await storage.bucket(bucketName).enableRequesterPays();

console.log(
  `Requester-pays requests have been enabled for bucket ${bucketName}.`
);

PHP

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

use Google\Cloud\Storage\StorageClient;

/**
 * Enable a bucket's requesterpays metadata.
 *
 * @param string $projectId Your Google Cloud project ID.
 * @param string $bucketName Name of your Google Cloud Storage bucket.
 *
 * @return void
 */
function enable_requester_pays($projectId, $bucketName)
{
    $storage = new StorageClient([
        'projectId' => $projectId
    ]);
    $bucket = $storage->bucket($bucketName);
    $bucket->update([
        'billing' => [
            'requesterPays' => true
        ]
    ]);
    printf('Requester pays has been enabled for %s' . PHP_EOL, $bucketName);
}

Python

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

def enable_requester_pays(bucket_name):
    """Enable a bucket's requesterpays metadata"""
    storage_client = storage.Client()
    bucket = storage_client.get_bucket(bucket_name)
    bucket.requester_pays = True
    bucket.patch()
    print('Requester Pays has been enabled for {}'.format(bucket_name))

Ruby

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

# project_id  = "Your Google Cloud project ID"
# bucket_name = "Name of your Google Cloud Storage bucket"

require "google/cloud/storage"

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

bucket.requester_pays = true

puts "Requester pays has been enabled for #{bucket_name}"

REST API

JSON API

  1. OAuth 2.0 Playground 获取授权访问令牌。将 Playground 配置为使用您自己的 OAuth 凭据。
  2. 创建一个包含以下信息的 .json 文件:
  3. {
      "billing": {
        "requesterPays": true
      }
    }
  4. 使用 cURL,通过 PATCH Bucket 请求调用 JSON API,将 [VALUES_IN_BRACKETS] 替换为适当的值:
    curl -X PATCH --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]?fields=billing"

XML API

  1. OAuth 2.0 Playground 获取授权访问令牌。将 Playground 配置为使用您自己的 OAuth 凭据。
  2. 创建一个包含以下信息的 .xml 文件,并将 [VALUES_IN_BRACKETS] 替换为适当的值:
    <BillingConfiguration>
      <RequesterPays>Enabled</RequesterPays>
    </BillingConfiguration>
  3. 使用 cURL,通过 PUT Bucket 请求和 requesterpays 查询字符串参数调用 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]?billing"

停用请求者付款功能

要为存储分区停用请求者付款功能,请按如下所述操作:

Console

  1. 在 Google Cloud Platform Console 中打开 Cloud Storage 浏览器。
    打开 Cloud Storage 浏览器
  2. 在存储分区列表中,找到要停用的存储分区,然后点击请求者付款列中的开启按钮。

  3. 在随即出现的窗口中,点击停用

此功能停用后,请求者付款列中会显示一个灰色气泡和一个关闭按钮。

gsutil

使用 gsutil requesterpays set off 命令,将 [VALUES_IN_BRACKETS] 替换为适当的值:

gsutil requesterpays set off gs://[BUCKET_NAME]

代码示例

C++

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

namespace gcs = google::cloud::storage;
using ::google::cloud::StatusOr;
[](gcs::Client client, std::string bucket_name, std::string project_id) {
  StatusOr<gcs::BucketMetadata> bucket_metadata = client.PatchBucket(
      bucket_name,
      gcs::BucketMetadataPatchBuilder().SetBilling(gcs::BucketBilling{false}),
      gcs::UserProject(project_id));

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

  std::cout << "Billing configuration for bucket " << bucket_name
            << " is updated. The bucket now";
  if (!bucket_metadata->has_billing()) {
    std::cout << " has no billing configuration.\n";
  } else if (bucket_metadata->billing().requester_pays) {
    std::cout << " is configured to charge the caller for requests\n";
  } else {
    std::cout << " is configured to charge the project that owns the bucket"
              << " for requests.\n";
  }
}

C#

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

void DisableRequesterPays(string bucketName)
{
    var storage = StorageClient.Create();
    var bucket = storage.GetBucket(bucketName, new GetBucketOptions()
    {
        UserProject = s_projectId
    });
    bucket.Billing = bucket.Billing ?? new Bucket.BillingData();
    bucket.Billing.RequesterPays = false;
    bucket = storage.UpdateBucket(bucket, new UpdateBucketOptions()
    {
        // Use IfMetagenerationMatch to avoid race conditions.
        IfMetagenerationMatch = bucket.Metageneration,
        UserProject = s_projectId
    });
}

Go

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

bucket := c.Bucket(bucketName)
bucketAttrsToUpdate := storage.BucketAttrsToUpdate{
	RequesterPays: false,
}
if _, err := bucket.Update(ctx, bucketAttrsToUpdate); err != nil {
	return err
}

Java

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

// Instantiate a Google Cloud Storage client
Storage storage = StorageOptions.getDefaultInstance().getService();

// The name of the bucket to disable requester-paying for, e.g. "my-bucket"
// String bucketName = "my-bucket"
BucketInfo bucketInfo = BucketInfo.newBuilder(bucketName).setRequesterPays(false).build();

// Update the bucket, throws StorageException on failure
Bucket bucket = storage.update(bucketInfo);

System.out.println("Requester pays status for " + bucketName + ": " + bucket.requesterPays());

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 line before running the sample.
 */
// const bucketName = 'Name of a bucket, e.g. my-bucket';

// Disables requester-pays requests
await storage.bucket(bucketName).disableRequesterPays();

console.log(
  `Requester-pays requests have been disabled for bucket ${bucketName}.`
);

PHP

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

use Google\Cloud\Storage\StorageClient;

/**
 * Disable a bucket's requesterpays metadata.
 *
 * @param string $projectId Your Google Cloud project ID.
 * @param string $bucketName Name of your Google Cloud Storage bucket.
 *
 * @return void
 */
function disable_requester_pays($projectId, $bucketName)
{
    $storage = new StorageClient([
        'projectId' => $projectId
    ]);
    $bucket = $storage->bucket($bucketName);
    $bucket->update([
        'billing' => [
            'requesterPays' => false
        ]
    ]);
    printf('Requester pays has been disabled for %s' . PHP_EOL, $bucketName);
}

Python

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

def disable_requester_pays(bucket_name):
    """Disable a bucket's requesterpays metadata"""
    storage_client = storage.Client()
    bucket = storage_client.get_bucket(bucket_name)
    bucket.requester_pays = False
    bucket.patch()
    print('Requester Pays has been disabled for {}'.format(bucket_name))

Ruby

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

# project_id  = "Your Google Cloud project ID"
# bucket_name = "Name of your Google Cloud Storage bucket"

require "google/cloud/storage"

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

bucket.requester_pays = false

puts "Requester pays has been disabled for #{bucket_name}"

REST API

JSON API

  1. OAuth 2.0 Playground 获取授权访问令牌。将 Playground 配置为使用您自己的 OAuth 凭据。
  2. 创建一个包含以下信息的 .json 文件:
  3. {
      "billing": {
        "requesterPays": false
      }
    }
  4. 使用 cURL,通过 PATCH Bucket 请求调用 JSON API,将 [VALUES_IN_BRACKETS] 替换为适当的值:
    curl -X PATCH --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]?fields=billing"

XML API

  1. OAuth 2.0 Playground 获取授权访问令牌。将 Playground 配置为使用您自己的 OAuth 凭据。
  2. 创建一个包含以下信息的 .xml 文件,并将 [VALUES_IN_BRACKETS] 替换为适当的值:
    <BillingConfiguration>
      <RequesterPays>Disabled</RequesterPays>
    </BillingConfiguration>
  3. 使用 cURL,通过 PUT Bucket 请求和 requesterpays 查询字符串参数调用 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]?billing"

检查请求者付款功能是否已启用

要检查某个存储分区是否启用了请求者付款功能,请按如下所述操作:

Console

  1. 在 Google Cloud Platform Console 中打开 Cloud Storage 浏览器。
    打开 Cloud Storage 浏览器
  2. 在存储分区列表中,可在请求者付款列中查看每个存储分区的请求者付款功能状态。

如果已启用,则状态为绿色且显示有文字开启

gsutil

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

gsutil requesterpays get gs://[BUCKET_NAME]

如果请求者付款功能已启用,您会看到类似如下所示的响应:

gs://[BUCKET_NAME]: Enabled

代码示例

C++

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

namespace gcs = google::cloud::storage;
using ::google::cloud::StatusOr;
[](gcs::Client client, std::string bucket_name) {
  StatusOr<gcs::BucketMetadata> bucket_metadata =
      client.GetBucketMetadata(bucket_name);

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

  if (!bucket_metadata->has_billing()) {
    std::cout
        << "The bucket " << bucket_metadata->name() << " does not have a"
        << " billing configuration. The default applies, i.e., the project"
        << " that owns the bucket pays for the requests.\n";
    return;
  }

  if (bucket_metadata->billing().requester_pays) {
    std::cout
        << "The bucket " << bucket_metadata->name()
        << " is configured to charge the calling project for the requests.\n";
  } else {
    std::cout << "The bucket " << bucket_metadata->name()
              << " is configured to charge the project that owns the bucket "
                 "for the requests.\n";
  }
}

C#

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

bool GetRequesterPays(string bucketName)
{
    var storage = StorageClient.Create();
    var bucket = storage.GetBucket(bucketName, new GetBucketOptions()
    {
        UserProject = s_projectId
    });
    bool? requesterPaysOrNull = bucket.Billing?.RequesterPays;
    bool requesterPays =
        requesterPaysOrNull.HasValue ? requesterPaysOrNull.Value : false;
    Console.WriteLine("RequesterPays: {0}", requesterPays);
    return requesterPays;
}

Go

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

attrs, err := c.Bucket(bucketName).Attrs(ctx)
if err != nil {
	return err
}
log.Printf("Is requester pays enabled? %v\n", attrs.RequesterPays)

Java

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

// Instantiate a Google Cloud Storage client
Storage storage = StorageOptions.getDefaultInstance().getService();

// The name of the bucket to retrieve requester-pays status, eg. "my-bucket"
// String bucketName = "my-bucket"
// Retrieve the bucket, throws StorageException on failure
Bucket bucket = storage.get(bucketName, Storage.BucketGetOption.fields(BucketField.BILLING));

System.out.println("Requester pays status : " + bucket.requesterPays());

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 line before running the sample.
 */
// const bucketName = 'Name of a bucket, e.g. my-bucket';

// Gets the requester-pays status of a bucket
const [metadata] = await storage.bucket(bucketName).getMetadata();

let status;
if (metadata && metadata.billing && metadata.billing.requesterPays) {
  status = `enabled`;
} else {
  status = `disabled`;
}
console.log(
  `Requester-pays requests are ${status} for bucket ${bucketName}.`
);

PHP

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

use Google\Cloud\Storage\StorageClient;

/**
 * Get a bucket's requesterpays metadata.
 *
 * @param string $projectId Your Google Cloud project ID.
 * @param string $bucketName Name of your Google Cloud Storage bucket.
 *
 * @return void
 */
function get_requester_pays_status($projectId, $bucketName)
{
    $storage = new StorageClient([
        'projectId' => $projectId
    ]);
    $bucket = $storage->bucket($bucketName);
    $bucketInformation = $bucket->info();
    $requesterPaysStatus = $bucketInformation['billing']['requesterPays'];
    if ($requesterPaysStatus) {
        printf('Requester Pays is enabled for %s' . PHP_EOL, $bucketName);
    } else {
        printf('Requester Pays is disabled for %s' . PHP_EOL, $bucketName);
    }
}

Python

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

def get_requester_pays_status(bucket_name):
    """Get a bucket's requester pays metadata"""
    storage_client = storage.Client()
    bucket = storage_client.get_bucket(bucket_name)
    requester_pays_status = bucket.requester_pays
    if requester_pays_status:
        print('Requester Pays is enabled for {}'.format(bucket_name))
    else:
        print('Requester Pays is disabled for {}'.format(bucket_name))

Ruby

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

# project_id  = "Your Google Cloud project ID"
# bucket_name = "Name of your Google Cloud Storage bucket"

require "google/cloud/storage"

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

if bucket.requester_pays
  puts "Requester Pays is enabled for #{bucket_name}"
else
  puts "Requester Pays is disabled for #{bucket_name}"
end

REST API

JSON API

  1. OAuth 2.0 Playground 获取授权访问令牌。将 Playground 配置为使用您自己的 OAuth 凭据。
  2. 使用 cURL,通过 GET Bucket 请求调用 JSON API,将 [VALUES_IN_BRACKETS] 替换为适当的值:
    curl -X GET -H "Authorization: Bearer [OAUTH2_TOKEN]" \
        "https://www.googleapis.com/storage/v1/b/[BUCKET_NAME]?fields=billing"

XML API

  1. OAuth 2.0 Playground 获取授权访问令牌。将 Playground 配置为使用您自己的 OAuth 凭据。
  2. 使用 cURL,通过 GET Bucket 请求和 billing 查询字符串参数调用 XML API,将 [VALUES_IN_BRACKETS] 替换为适当的值:
    curl -X GET \
        -H "Authorization: Bearer [OAUTH2_TOKEN]" \
        "https://storage.googleapis.com/[BUCKET_NAME]?billing"

访问启用了请求者付款功能的存储分区

以下示例显示了如何包含结算项目,以便从启用了请求者付款功能的存储分区中下载对象。若要对启用了请求者付款功能的存储分区或该存储分区中的对象执行其他请求,可以按照与此类似的过程进行操作。请参阅请求者付款功能访问要求,了解前提条件注意事项。

Console

  1. 在 Google Cloud Platform Console 中打开 Cloud Storage 浏览器。
    打开 Cloud Storage 浏览器
  2. 在存储分区列表中,找到包含要下载的对象的存储分区,并点击其名称。

  3. 在随即出现的窗口中,使用下拉菜单选择结算项目。

  4. 选中相应复选框以确认您有权使用所选项目进行结算。

  5. 点击保存

  6. 按照正常方式下载对象

gsutil

在您的请求中使用 -u 标志和要结算的项目的 ID,并将 [VALUES_IN_BRACKETS] 替换为适当的值:

gsutil -u [PROJECT_ID] cp gs://[BUCKET_NAME]/[OBJECT_NAME] [OBJECT_DESTINATION]

代码示例

C++

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

namespace gcs = google::cloud::storage;
[](gcs::Client client, std::string bucket_name, std::string object_name,
   std::string billed_project) {
  gcs::ObjectReadStream stream = client.ReadObject(
      bucket_name, object_name, gcs::UserProject(billed_project));

  std::string line;
  while (std::getline(stream, line, '\n')) {
    std::cout << line << "\n";
  }
}

C#

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

private void DownloadObjectRequesterPays(string bucketName,
    string objectName, string localPath = null)
{
    var storage = StorageClient.Create();
    localPath = localPath ?? Path.GetFileName(objectName);
    using (var outputFile = File.OpenWrite(localPath))
    {
        storage.DownloadObject(bucketName, objectName, outputFile,
            new DownloadObjectOptions()
            {
                UserProject = s_projectId
            });
    }
    Console.WriteLine(
        $"downloaded {objectName} to {localPath} paid by {s_projectId}.");
}

Go

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

bucket := client.Bucket(bucketName).UserProject(billingProjectID)
src := bucket.Object(object)

f, err := os.OpenFile(localpath, os.O_RDWR|os.O_CREATE, 0755)
if err != nil {
	return err
}
rc, err := src.NewReader(ctx)
if err != nil {
	return err
}
if _, err := io.Copy(f, rc); err != nil {
	return err
}
if err := rc.Close(); err != nil {
	return err
}
fmt.Printf("Downloaded using %v as billing project.\n", billingProjectID)

Java

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

// The project ID to bill
// String projectId = "my-billable-project-id";

// The name of the bucket to access
// String bucketName = "my-bucket";

// The name of the remote file to download
// String srcFilename = "file.txt";

// The path to which the file should be downloaded
// Path destFilePath = Paths.get("/local/path/to/file.txt");

// Instantiate a Google Cloud Storage client
Storage storage = StorageOptions.getDefaultInstance().getService();

// Get specific file from specified bucket
Blob blob = storage.get(BlobId.of(bucketName, srcFilename));

// Download file to specified path
blob.downloadTo(destFilePath, Blob.BlobSourceOption.userProject(projectId));

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 projectId = 'The project ID to bill from, e.g. some-project-id';
// const bucketName = 'Name of a bucket, e.g. my-bucket';
// const srcFilename = 'Name of file to download, e.g. file.txt';
// const destFilename = 'Local destination of file, e.g. ./local/path/to/file.txt';

const options = {
  // The path to which the file should be downloaded, e.g. "./file.txt"
  destination: destFilename,

  // The project to bill from, if requester-pays requests are enabled
  userProject: projectId,
};

// Downloads the file
await storage
  .bucket(bucketName)
  .file(srcFilename)
  .download(options);

console.log(
  `gs://${bucketName}/${srcFilename} downloaded to ${destFilename} using requester-pays requests.`
);

PHP

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

use Google\Cloud\Storage\StorageClient;

/**
 * Download file using specified project as requester
 *
 * @param string $projectId Your Google Cloud billable project ID.
 * @param string $bucketName A Google Cloud Storage bucket name.
 * @param string $objectName Name of object in Google Cloud Storage to download locally.
 * @param string $destination Path to local file to save.
 *
 * @return void
 */
function download_file_requester_pays($projectId, $bucketName, $objectName, $destination)
{
    $storage = new StorageClient([
        'projectId' => $projectId
    ]);
    $userProject = true;
    $bucket = $storage->bucket($bucketName, $userProject);
    $object = $bucket->object($objectName);
    $object->downloadToFile($destination);
    printf('Downloaded gs://%s/%s to %s using requester-pays requests.' . PHP_EOL,
        $bucketName, $objectName, basename($destination));
}

Python

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

def download_file_requester_pays(
        bucket_name, project_id, source_blob_name, destination_file_name):
    """Download file using specified project as the requester"""
    storage_client = storage.Client()
    user_project = project_id
    bucket = storage_client.bucket(bucket_name, user_project)
    blob = bucket.blob(source_blob_name)
    blob.download_to_filename(destination_file_name)

    print('Blob {} downloaded to {} using a requester-pays request.'.format(
        source_blob_name,
        destination_file_name))

Ruby

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

# project_id  = "Your Google Cloud billable project ID"
# bucket_name = "A Google Cloud Storage bucket name"
# file_name   = "Name of file in Google Cloud Storage to download locally"
# local_path  = "Destination path for downloaded file"

require "google/cloud/storage"

storage = Google::Cloud::Storage.new project_id: project_id
bucket  = storage.bucket bucket_name, skip_lookup: true, user_project: true
file    = bucket.file file_name

file.download local_path

puts "Downloaded #{file.name} using billing project #{project_id}"

REST API

JSON API

  1. OAuth 2.0 Playground 获取授权访问令牌。将 Playground 配置为使用您自己的 OAuth 凭据。
  2. 在您的请求中,加入 userProject 查询字符串参数并将其设置为要结算的项目的 ID,并将 [VALUES_IN_BRACKETS] 替换为适当的值:
    curl -X GET \
        -H "Authorization: Bearer [OAUTH2_TOKEN]" \
        -o "[SAVE_TO_LOCATION]" \
        "https://www.googleapis.com/storage/v1/b/[BUCKET_NAME]/o/[OBJECT_NAME]?alt=media&userProject=[PROJECT_ID]"

XML API

  1. OAuth 2.0 Playground 获取授权访问令牌。将 Playground 配置为使用您自己的 OAuth 凭据。
  2. 在您的请求中,加入 x-goog-user-project 标头并将其设置为要结算的项目的 ID,并将 [VALUES_IN_BRACKETS] 替换为适当的值:
    curl -X GET \
        -H "Authorization: Bearer [OAUTH2_TOKEN]" \
        -H "x-goog-user-project: [PROJECT_ID]" \
        -o "[SAVE_TO_LOCATION]" \
        "https://storage.googleapis.com/[BUCKET_NAME]/[OBJECT_NAME]"
此页内容是否有用?请给出您的反馈和评价:

发送以下问题的反馈:

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