使用对象版本控制

转到概念

本页面介绍了如何设置对象版本控制,并提供了使用对象版本控制的示例。

设置对象版本控制

以下各节介绍了如何使用 gsutil 工具JSON APIXML API 打开和关闭对象版本控制功能。目前,无法使用 Google Cloud Console 控制对象版本控制功能。

启用对象版本控制

如需对存储分区启用对象版本控制,请执行以下操作:

gsutil

使用 gsutil versioning set on 命令:

gsutil versioning set on gs://[BUCKET_NAME]

其中 [BUCKET_NAME] 是相关存储分区的名称,例如 my-bucket

代码示例

C++

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

namespace gcs = google::cloud::storage;
using ::google::cloud::StatusOr;
[](gcs::Client client, std::string const& bucket_name) {
  StatusOr<gcs::BucketMetadata> original =
      client.GetBucketMetadata(bucket_name);
  if (!original) throw std::runtime_error(original.status().message());

  StatusOr<gcs::BucketMetadata> patched = client.PatchBucket(
      bucket_name,
      gcs::BucketMetadataPatchBuilder().SetVersioning(
          gcs::BucketVersioning{true}),
      gcs::IfMetagenerationMatch(original->metageneration()));
  if (!patched) throw std::runtime_error(patched.status().message());

  if (patched->versioning().has_value()) {
    std::cout << "Object versioning for bucket " << bucket_name << " is "
              << (patched->versioning()->enabled ? "enabled" : "disabled")
              << "\n";
  } else {
    std::cout << "Object versioning for bucket " << bucket_name
              << " is disabled.\n";
  }
}

Java

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

import com.google.cloud.storage.Bucket;
import com.google.cloud.storage.Storage;
import com.google.cloud.storage.StorageOptions;

public class EnableBucketVersioning {
  public static void enableBucketVersioning(String projectId, String bucketName) {
    // The ID of your GCP project
    // String projectId = "your-project-id";

    // The ID of your GCS bucket
    // String bucketName = "your-unique-bucket-name";

    Storage storage = StorageOptions.newBuilder().setProjectId(projectId).build().getService();
    Bucket bucket = storage.get(bucketName);
    bucket.toBuilder().setVersioningEnabled(true).build().update();

    System.out.println("Versioning is now enabled for bucket " + bucketName);
  }
}

REST API

JSON API

  1. OAuth 2.0 Playground 获取授权访问令牌。将 Playground 配置为使用您自己的 OAuth 凭据。
  2. 创建一个包含以下信息的 .json 文件:

    {
      "versioning": {
        "enabled": true
      }
    }
  3. 使用 cURL,通过 PATCH Bucket 请求调用 JSON API

    curl -X PATCH --data-binary @[JSON_FILE_NAME].json \
      -H "Authorization: Bearer [OAUTH2_TOKEN]" \
      -H "Content-Type: application/json" \
      "https://storage.googleapis.com/storage/v1/b/[BUCKET_NAME]?fields=versioning"

    其中:

    • [JSON_FILE_NAME] 是您在第 2 步中创建的文件。
    • [OAUTH2_TOKEN] 是您在第 1 步中创建的访问令牌。
    • [BUCKET_NAME] 是相关存储分区的名称,例如 my-bucket

XML API

  1. OAuth 2.0 Playground 获取授权访问令牌。将 Playground 配置为使用您自己的 OAuth 凭据。
  2. 创建一个包含以下信息的 .xml 文件:

    <VersioningConfiguration>
      <Status>Enabled</Status>
    </VersioningConfiguration>
  3. 使用 cURL,通过 PUT Bucket 请求和 versioning 查询字符串参数调用 XML API

    curl -X PUT --data-binary @[XML_FILE_NAME].xml \
      -H "Authorization: Bearer [OAUTH2_TOKEN]" \
      "https://storage.googleapis.com/[BUCKET_NAME]?versioning"

    其中:

    • [XML_FILE_NAME] 是您在第 2 步中创建的文件。
    • [OAUTH2_TOKEN] 是您在第 1 步中创建的访问令牌。
    • [BUCKET_NAME] 是相关存储分区的名称,例如 my-bucket

启用对象版本控制后,每次覆盖或删除有效对象版本时,该版本都将成为非当前版本

停用对象版本控制

要在存储分区上停用对象版本控制,请执行以下操作:

gsutil

使用 gsutil versioning set off 命令:

gsutil versioning set off gs://[BUCKET_NAME]

其中 [BUCKET_NAME] 是相关存储分区的名称,例如 my-bucket

代码示例

C++

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

namespace gcs = google::cloud::storage;
using ::google::cloud::StatusOr;
[](gcs::Client client, std::string const& bucket_name) {
  StatusOr<gcs::BucketMetadata> original =
      client.GetBucketMetadata(bucket_name);
  if (!original) throw std::runtime_error(original.status().message());

  StatusOr<gcs::BucketMetadata> patched = client.PatchBucket(
      bucket_name,
      gcs::BucketMetadataPatchBuilder().SetVersioning(
          gcs::BucketVersioning{false}),
      gcs::IfMetagenerationMatch(original->metageneration()));
  if (!patched) throw std::runtime_error(patched.status().message());

  if (patched->versioning().has_value()) {
    std::cout << "Object versioning for bucket " << bucket_name << " is "
              << (patched->versioning()->enabled ? "enabled" : "disabled")
              << "\n";
  } else {
    std::cout << "Object versioning for bucket " << bucket_name
              << " is disabled.\n";
  }
}

Java

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

import com.google.cloud.storage.Bucket;
import com.google.cloud.storage.Storage;
import com.google.cloud.storage.StorageOptions;

public class DisableBucketVersioning {
  public static void disableBucketVersioning(String projectId, String bucketName) {
    // The ID of your GCP project
    // String projectId = "your-project-id";

    // The ID of your GCS bucket
    // String bucketName = "your-unique-bucket-name";

    Storage storage = StorageOptions.newBuilder().setProjectId(projectId).build().getService();
    Bucket bucket = storage.get(bucketName);
    bucket.toBuilder().setVersioningEnabled(false).build().update();

    System.out.println("Versioning is now disabled for bucket " + bucketName);
  }
}

REST API

JSON API

  1. OAuth 2.0 Playground 获取授权访问令牌。将 Playground 配置为使用您自己的 OAuth 凭据。
  2. 创建一个包含以下信息的 .json 文件:

    {
      "versioning": {
        "enabled": false
      }
    }
  3. 使用 cURL,通过 PATCH Bucket 请求调用 JSON API

    curl -X PATCH --data-binary @[JSON_FILE_NAME].json \
      -H "Authorization: Bearer [OAUTH2_TOKEN]" \
      -H "Content-Type: application/json" \
      "https://storage.googleapis.com/storage/v1/b/[BUCKET_NAME]?fields=versioning"

    其中:

    • [JSON_FILE_NAME] 是您在第 2 步中创建的文件。
    • [OAUTH2_TOKEN] 是您在第 1 步中创建的访问令牌。
    • [BUCKET_NAME] 是相关存储分区的名称,例如 my-bucket

XML API

  1. OAuth 2.0 Playground 获取授权访问令牌。将 Playground 配置为使用您自己的 OAuth 凭据。
  2. 创建一个包含以下信息的 .xml 文件:

    <VersioningConfiguration>
      <Status>Suspended</Status>
    </VersioningConfiguration>
  3. 使用 cURL,通过 PUT Bucket 请求和 versioning 查询字符串参数调用 XML API

    curl -X PUT --data-binary @[XML_FILE_NAME].xml \
      -H "Authorization: Bearer [OAUTH2_TOKEN]" \
      "https://storage.googleapis.com/[BUCKET_NAME]?versioning"

    其中:

    • [XML_FILE_NAME] 是您在第 2 步中创建的文件。
    • [OAUTH2_TOKEN] 是您在第 1 步中创建的访问令牌。
    • [BUCKET_NAME] 是相关存储分区的名称,例如 my-bucket

检查是否启用了对象版本控制

要检查存储分区是否启用了对象版本控制,请执行以下操作:

gsutil

使用 gsutil versioning get 命令:

gsutil versioning get gs://[BUCKET_NAME]

其中 [BUCKET_NAME] 是相关存储分区的名称,例如 my-bucket

如果已启用对象版本控制,您会看到类似如下所示的响应:

gs://[BUCKET_NAME]: Enabled

REST API

JSON API

  1. OAuth 2.0 Playground 获取授权访问令牌。将 Playground 配置为使用您自己的 OAuth 凭据。
  2. 使用 cURL,通过 GET Bucket 请求调用 JSON API

    curl -X GET \
      -H "Authorization: Bearer [OAUTH2_TOKEN]" \
      "https://storage.googleapis.com/storage/v1/b/[BUCKET_NAME]?fields=versioning"

    其中:

    • [OAUTH2_TOKEN] 是您在第 1 步中创建的访问令牌。
    • [BUCKET_NAME] 是相关存储分区的名称,例如 my-bucket

XML API

  1. OAuth 2.0 Playground 获取授权访问令牌。将 Playground 配置为使用您自己的 OAuth 凭据。
  2. 使用 cURL,通过 GET Bucket 请求和 versioning 查询字符串参数调用 XML API

    curl -X GET \
      -H "Authorization: Bearer [OAUTH2_TOKEN]" \
      "https://storage.googleapis.com/[BUCKET_NAME]?versioning"

    其中:

    • [OAUTH2_TOKEN] 是您在第 1 步中创建的访问令牌。
    • [BUCKET_NAME] 是相关存储分区的名称,例如 my-bucket

使用版本控制的对象

以下各节显示了如何使用版本化对象。如需查看使用对象版本控制的详尽示例,请参阅对象版本控制示例

列出非当前对象版本

如需列出对象的当前版本和非当前版本并查看其 generation 编号,请执行以下操作:

gsutil

使用 gsutil ls -a 命令:

gsutil ls -a gs://[BUCKET_NAME]

其中 [BUCKET_NAME] 是相关存储分区的名称,例如 my-bucket

响应类似如下示例:

gs://[BUCKET_NAME]/[OBJECT_NAME1]#[GENERATION_NUMBER1]
gs://[BUCKET_NAME]/[OBJECT_NAME1]#[GENERATION_NUMBER2]
gs://[BUCKET_NAME]/[OBJECT_NAME1]#[GENERATION_NUMBER3]
...

代码示例

C++

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

namespace gcs = google::cloud::storage;
[](gcs::Client client, std::string const& bucket_name) {
  for (auto&& object_metadata :
       client.ListObjects(bucket_name, gcs::Versions{true})) {
    if (!object_metadata) {
      throw std::runtime_error(object_metadata.status().message());
    }

    std::cout << "bucket_name=" << object_metadata->bucket()
              << ", object_name=" << object_metadata->name()
              << ", generation=" << object_metadata->generation() << "\n";
  }
}

Java

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

import com.google.api.gax.paging.Page;
import com.google.cloud.storage.Blob;
import com.google.cloud.storage.Bucket;
import com.google.cloud.storage.Storage;
import com.google.cloud.storage.StorageOptions;

public class ListObjectsWithOldVersions {
  public static void listObjectsWithOldVersions(String projectId, String bucketName) {
    // The ID of your GCP project
    // String projectId = "your-project-id";

    // The ID of your GCS bucket
    // String bucketName = "your-unique-bucket-name";
    Storage storage = StorageOptions.newBuilder().setProjectId(projectId).build().getService();
    Bucket bucket = storage.get(bucketName);
    Page<Blob> blobs = bucket.list(Storage.BlobListOption.versions(true));

    for (Blob blob : blobs.iterateAll()) {
      System.out.println(blob.getName() + "," + blob.getGeneration());
    }
  }
}

REST API

JSON API

  1. OAuth 2.0 Playground 获取授权访问令牌。将 Playground 配置为使用您自己的 OAuth 凭据。
  2. 使用 cURL,通过 LIST Object 请求调用 JSON API

    curl -X GET \
      -H "Authorization: Bearer [OAUTH2_TOKEN]" \
      "https://storage.googleapis.com/storage/v1/b/[BUCKET_NAME]/o?versions=true"

    其中:

    • [OAUTH2_TOKEN] 是您在第 1 步中创建的访问令牌。
    • [BUCKET_NAME] 是相关存储分区的名称,例如 my-bucket

对象非当前版本具有 timeDeleted 属性。

XML API

  1. OAuth 2.0 Playground 获取授权访问令牌。将 Playground 配置为使用您自己的 OAuth 凭据。
  2. 使用 cURL,通过 GET Bucket 请求和 versions 查询字符串参数调用 XML API

    curl -X GET \
      -H "Authorization: Bearer [OAUTH2_TOKEN]" \
      "https://storage.googleapis.com/[BUCKET_NAME]?versions"

    其中:

    • [OAUTH2_TOKEN] 是您在第 1 步中创建的访问令牌。
    • [BUCKET_NAME] 是相关存储分区的名称,例如 my-bucket

与不使用 versions 查询参数相比,在使用该查询参数时,GET 请求的结果存在一些差异。具体而言,当您在请求中包含 versions 查询参数时,Cloud Storage 会返回以下信息:

  • Version 元素(包含每个对象的相关信息)。
  • DeletedTime 元素(包含对象版本成为非当前版本(删除或覆盖)的时间)。
  • IsLatest 元素(指示特定对象是否为最新版本)。
  • 如果对象列出操作仅列出部分对象(当存储分区中包含许多对象版本时,会发生此情况),则会返回 NextGenerationMarker 元素。在后续请求的 generationmarker 查询参数中使用此元素的值,以便从上次的截止点继续。generationmarker 查询参数的使用方式与 marker 查询参数相同,用于为非版本控制的存储分区的列表结果分页。

访问非当前对象版本

如需在执行下载对象、查看其元数据或更新其元数据等任务时使用非当前对象版本,请执行以下操作:

gsutil

  1. 将非当前版本的 generation 编号附加到对象名称:

    [OBJECT_NAME]#[GENERATION_NUMBER]

    其中:

    • [OBJECT_NAME] 是非当前版本的名称,例如 pets/dog.png
    • [GENERATION_NUMBER] 是非当前版本的世代编号,例如 1560468815691234
  2. 使用第 1 步中的字符串,按照适用于对象当前版本的常规方式继续操作。

REST API

JSON API

  1. 将非当前版本的 generation 编号附加到对象的 URI:

    https://storage.googleapis.com/storage/v1/b/[BUCKET_NAME]/o/[OBJECT_NAME]?generation=[GENERATION_NUMBER]

    其中:

    • [BUCKET_NAME] 是包含非当前版本的存储分区的名称,例如 my-bucket
    • [OBJECT_NAME] 是非当前版本的名称,例如 pets/dog.png
    • [GENERATION_NUMBER] 是非当前版本的世代编号,例如 1560468815691234
  2. 使用第 1 步中的 URI,按照适用于对象当前版本的常规方式继续操作。

XML API

  1. 将非当前版本的 generation 编号附加到对象的 URI:

    https://storage.googleapis.com/[BUCKET_NAME]/[OBJECT_NAME]?generation=[GENERATION_NUMBER]

    其中:

    • [BUCKET_NAME] 是包含非当前版本的存储分区的名称,例如 my-bucket
    • [OBJECT_NAME] 是非当前版本的名称,例如 pets/dog.png
    • [GENERATION_NUMBER] 是非当前版本的世代编号,例如 1560468815691234
  2. 使用第 1 步中的 URI,按照适用于对象当前版本的常规方式继续操作。

复制非当前对象版本

如需复制非当前对象版本,请执行以下操作:

gsutil

使用 gsutil cp 命令:

gsutil cp gs://[SOURCE_BUCKET_NAME]/[SOURCE_OBJECT_NAME]#[GENERATION_NUMBER] gs://[DESTINATION_BUCKET_NAME]/[DESTINATION_OBJECT_NAME]

其中:

  • [SOURCE_BUCKET_NAME] 是包含要复制的非当前版本的存储分区的名称,例如 my-bucket
  • [SOURCE_OBJECT_NAME] 是要复制的非当前版本的名称,例如 pets/dog.png
  • [GENERATION_NUMBER] 是要复制的非当前版本的世代编号,例如 1560468815691234
  • [DESTINATION_BUCKET_NAME] 是要在其中复制非当前版本的存储分区的名称,例如 my-bucket
  • [DESTINATION_OBJECT_NAME] 是非当前版本副本的名称,例如 pets/shiba.png

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

Operation completed over 1 objects/58.8 KiB.

代码示例

C++

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

namespace gcs = google::cloud::storage;
using ::google::cloud::StatusOr;
[](gcs::Client client, std::string const& source_bucket_name,
   std::string const& source_object_name,
   std::string const& destination_bucket_name,
   std::string const& destination_object_name,
   std::int64_t source_object_generation) {
  StatusOr<gcs::ObjectMetadata> copy =
      client.CopyObject(source_bucket_name, source_object_name,
                        destination_bucket_name, destination_object_name,
                        gcs::SourceGeneration{source_object_generation});
  if (!copy) throw std::runtime_error(copy.status().message());

  std::cout << "Successfully copied " << source_object_name << " generation "
            << source_object_generation << " in bucket " << source_bucket_name
            << " to bucket " << copy->bucket() << " with name "
            << copy->name()
            << ".\nThe full metadata after the copy is: " << *copy << "\n";
}

Java

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

import com.google.cloud.storage.BlobId;
import com.google.cloud.storage.Storage;
import com.google.cloud.storage.StorageOptions;

public class CopyOldVersionOfObject {
  public static void copyOldVersionOfObject(
      String projectId,
      String bucketName,
      String objectToCopy,
      long generationToCopy,
      String newObjectName) {
    // The ID of your GCP project
    // String projectId = "your-project-id";

    // The ID of your GCS bucket
    // String bucketName = "your-unique-bucket-name";

    // The ID of the GCS object to copy an old version of
    // String objectToCopy = "your-object-name";

    // The generation of objectToCopy to copy
    // long generationToCopy = 1579287380533984;

    // What to name the new object with the old data from objectToCopy
    // String newObjectName = "your-new-object";

    Storage storage = StorageOptions.newBuilder().setProjectId(projectId).build().getService();
    Storage.CopyRequest copyRequest =
        Storage.CopyRequest.newBuilder()
            .setSource(BlobId.of(bucketName, objectToCopy, generationToCopy))
            .setTarget(BlobId.of(bucketName, newObjectName))
            .build();
    storage.copy(copyRequest);

    System.out.println(
        "Generation "
            + generationToCopy
            + " of object "
            + objectToCopy
            + " in bucket "
            + bucketName
            + " was copied to "
            + newObjectName);
  }
}

REST API

JSON API

  1. OAuth 2.0 Playground 获取授权访问令牌。将 Playground 配置为使用您自己的 OAuth 凭据。
  2. 使用 cURL,通过 POST Object 请求调用 JSON API

    curl -X POST \
      -H "Authorization: Bearer [OAUTH2_TOKEN]" \
      -H "Content-Length: 0" \
      "https://storage.googleapis.com/upload/storage/v1/b/[SOURCE_BUCKET_NAME]/o/[SOURCE_OBJECT_NAME]/rewriteTo/b/[DESTINATION_BUCKET_NAME]/o/[NAME_OF_COPY]?sourceGeneration=[GENERATION_NUMBER]"

    其中:

    • [OAUTH2_TOKEN] 是您在第 1 步中生成的访问令牌。
    • [SOURCE_BUCKET_NAME] 是包含要复制的非当前版本的存储分区的名称,例如 my-bucket
    • [SOURCE_OBJECT_NAME] 是要复制的非当前版本的名称,例如 pets/dog.png
    • [DESTINATION_BUCKET_NAME] 是要在其中复制非当前版本的存储分区的名称,例如 my-bucket
    • [NAME OF COPY] 是非当前版本副本的名称,例如 pets/shiba.png
    • [GENERATION_NUMBER] 是要复制的非当前版本的世代编号,例如 1560468815691234

XML API

  1. OAuth 2.0 Playground 获取授权访问令牌。将 Playground 配置为使用您自己的 OAuth 凭据。
  2. 使用 cURL,通过 PUT Object 请求调用 XML API

    curl -X PUT \
      -H "Authorization: Bearer [OAUTH2_TOKEN]" \
      -H "x-goog-copy-source: [SOURCE_BUCKET_NAME]/[SOURCE_OBJECT_NAME]" \
      -H "x-goog-copy-source-generation:[GENERATION_NUMBER]" \
      "https://storage.googleapis.com/[DESTINATION_BUCKET_NAME]/[NAME_OF_COPY]"

    其中:

    • [OAUTH2_TOKEN] 是您在第 1 步中生成的访问令牌。
    • [SOURCE_BUCKET_NAME] 是包含要复制的非当前版本的存储分区的名称,例如 my-bucket
    • [SOURCE_OBJECT_NAME] 是要复制的非当前版本的名称,例如 pets/dog.png
    • [GENERATION_NUMBER] 是要复制的非当前版本的世代编号,例如 1560468815691234
    • [DESTINATION_BUCKET_NAME] 是要在其中复制非当前版本的存储分区的名称,例如 my-bucket
    • [NAME OF COPY] 是非当前版本副本的名称,例如 pets/shiba.png

删除非当前对象版本

如需删除非当前对象版本,请执行以下操作:

gsutil

使用 gsutil rm 命令:

gsutil rm gs://[BUCKET_NAME]/[OBJECT_NAME]#[GENERATION_NUMBER]

其中:

  • [BUCKET_NAME] 是包含要删除的非当前版本的存储分区的名称,例如 my-bucket
  • [OBJECT_NAME] 是要删除的非当前版本的名称,例如 pets/dog.png
  • [GENERATION_NUMBER] 是要删除的非当前版本的世代编号,例如 1560468815691234

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

Operation completed over 1 objects.

代码示例

C++

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

namespace gcs = google::cloud::storage;
[](gcs::Client client, std::string const& bucket_name,
   std::string const& object_name, std::int64_t object_generation) {
  google::cloud::Status status = client.DeleteObject(
      bucket_name, object_name, gcs::Generation{object_generation});
  if (!status.ok()) throw std::runtime_error(status.message());

  std::cout << "Deleted " << object_name << " generation "
            << object_generation << " in bucket " << bucket_name << "\n";
}

Java

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

import com.google.cloud.storage.BlobId;
import com.google.cloud.storage.Storage;
import com.google.cloud.storage.StorageOptions;

public class DeleteOldVersionOfObject {
  public static void deleteOldVersionOfObject(
      String projectId, String bucketName, String objectName, long generationToDelete) {
    // The ID of your GCP project
    // String projectId = "your-project-id";

    // The ID of your GCS bucket
    // String bucketName = "your-unique-bucket-name";

    // The ID of your GCS object
    // String objectName = "your-object-name";

    // The generation of objectName to delete
    // long generationToDelete = 1579287380533984;

    Storage storage = StorageOptions.newBuilder().setProjectId(projectId).build().getService();
    storage.delete(BlobId.of(bucketName, objectName, generationToDelete));

    System.out.println(
        "Generation "
            + generationToDelete
            + " of object "
            + objectName
            + " was deleted from "
            + bucketName);
  }
}

REST API

JSON API

  1. OAuth 2.0 Playground 获取授权访问令牌。将 Playground 配置为使用您自己的 OAuth 凭据。
  2. 使用 cURL,通过 DELETE Object 请求调用 JSON API

    curl -X DELETE \
      -H "Authorization: Bearer [OAUTH2_TOKEN]" \
      "https://storage.googleapis.com/storage/v1/b/[BUCKET_NAME]/o/[OBJECT_NAME]?generation=[GENERATION_NUMBER]"

    其中:

    • [OAUTH2_TOKEN] 是您在第 1 步中生成的访问令牌。
    • [BUCKET_NAME] 是包含要删除的非当前版本的存储分区的名称,例如 my-bucket
    • [OBJECT_NAME] 是要删除的非当前版本的名称,例如 pets/dog.png
    • [GENERATION_NUMBER] 是要删除的非当前版本的世代编号,例如 1560468815691234

XML API

  1. OAuth 2.0 Playground 获取授权访问令牌。将 Playground 配置为使用您自己的 OAuth 凭据。
  2. 使用 cURL,通过 DELETE Object 请求调用 XML API

    curl -X DELETE \
      -H "Authorization: Bearer [OAUTH2_TOKEN]" \
      "https://storage.googleapis.com/[BUCKET_NAME]/[OBJECT_NAME]?generation=[GENERATION_NUMBER]"

    其中:

    • [OAUTH2_TOKEN] 是您在第 1 步中生成的访问令牌。
    • [BUCKET_NAME] 是包含要删除的非当前版本的存储分区的名称,例如 my-bucket
    • [OBJECT_NAME] 是要删除的非当前版本的名称,例如 pets/dog.png
    • [GENERATION_NUMBER] 是要删除的非当前版本的世代编号,例如 1560468815691234

后续步骤