本页面介绍了如何设置对象版本控制,并提供了使用对象版本控制的示例。
设置对象版本控制
以下各节介绍了如何使用 gsutil 工具、JSON API、XML 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 参考文档。
Go
如需了解详情,请参阅 Cloud Storage Go API 参考文档。
Java
如需了解详情,请参阅 Cloud Storage Java API 参考文档。
Python
如需了解详情,请参阅 Cloud Storage Python API 参考文档。
REST API
JSON API
- 从 OAuth 2.0 Playground 获取授权访问令牌。将 Playground 配置为使用您自己的 OAuth 凭据。
创建一个包含以下信息的
.json
文件:{ "versioning": { "enabled": true } }
使用
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
- 从 OAuth 2.0 Playground 获取授权访问令牌。将 Playground 配置为使用您自己的 OAuth 凭据。
创建一个包含以下信息的
.xml
文件:<VersioningConfiguration> <Status>Enabled</Status> </VersioningConfiguration>
使用
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 参考文档。
Go
如需了解详情,请参阅 Cloud Storage Go API 参考文档。
Java
如需了解详情,请参阅 Cloud Storage Java API 参考文档。
Python
如需了解详情,请参阅 Cloud Storage Python API 参考文档。
REST API
JSON API
- 从 OAuth 2.0 Playground 获取授权访问令牌。将 Playground 配置为使用您自己的 OAuth 凭据。
创建一个包含以下信息的
.json
文件:{ "versioning": { "enabled": false } }
使用
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
- 从 OAuth 2.0 Playground 获取授权访问令牌。将 Playground 配置为使用您自己的 OAuth 凭据。
创建一个包含以下信息的
.xml
文件:<VersioningConfiguration> <Status>Suspended</Status> </VersioningConfiguration>
使用
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://my-bucket: Enabled
REST API
JSON API
- 从 OAuth 2.0 Playground 获取授权访问令牌。将 Playground 配置为使用您自己的 OAuth 凭据。
使用
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
- 从 OAuth 2.0 Playground 获取授权访问令牌。将 Playground 配置为使用您自己的 OAuth 凭据。
使用
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_NAME2#GENERATION_NUMBER2 gs://BUCKET_NAME/OBJECT_NAME3#GENERATION_NUMBER3 ...
代码示例
C++
如需了解详情,请参阅 Cloud Storage C++ API 参考文档。
Go
如需了解详情,请参阅 Cloud Storage Go API 参考文档。
Java
如需了解详情,请参阅 Cloud Storage Java API 参考文档。
Node.js
如需了解详情,请参阅 Cloud Storage Node.js API 参考文档。
Python
如需了解详情,请参阅 Cloud Storage Python API 参考文档。
REST API
JSON API
- 从 OAuth 2.0 Playground 获取授权访问令牌。将 Playground 配置为使用您自己的 OAuth 凭据。
使用
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
- 从 OAuth 2.0 Playground 获取授权访问令牌。将 Playground 配置为使用您自己的 OAuth 凭据。
使用
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
将非当前版本的
generation
编号附加到对象名称:OBJECT_NAME#GENERATION_NUMBER
其中:
OBJECT_NAME
是非当前版本的名称,例如pets/dog.png
。GENERATION_NUMBER
是非当前版本的世代编号,例如1560468815691234
。
使用第 1 步中的字符串,按照适用于对象当前版本的常规方式继续操作。
REST API
JSON API
将非当前版本的
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
。
使用第 1 步中的 URI,按照适用于对象当前版本的常规方式继续操作。
XML API
将非当前版本的
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
。
使用第 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 参考文档。
Go
如需了解详情,请参阅 Cloud Storage Go API 参考文档。
Java
如需了解详情,请参阅 Cloud Storage Java API 参考文档。
Node.js
如需了解详情,请参阅 Cloud Storage Node.js API 参考文档。
Python
如需了解详情,请参阅 Cloud Storage Python API 参考文档。
REST API
JSON API
- 从 OAuth 2.0 Playground 获取授权访问令牌。将 Playground 配置为使用您自己的 OAuth 凭据。
使用
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
- 从 OAuth 2.0 Playground 获取授权访问令牌。将 Playground 配置为使用您自己的 OAuth 凭据。
使用
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 参考文档。
Go
如需了解详情,请参阅 Cloud Storage Go API 参考文档。
Java
如需了解详情,请参阅 Cloud Storage Java API 参考文档。
Node.js
如需了解详情,请参阅 Cloud Storage Node.js API 参考文档。
Python
如需了解详情,请参阅 Cloud Storage Python API 参考文档。
REST API
JSON API
- 从 OAuth 2.0 Playground 获取授权访问令牌。将 Playground 配置为使用您自己的 OAuth 凭据。
使用
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
- 从 OAuth 2.0 Playground 获取授权访问令牌。将 Playground 配置为使用您自己的 OAuth 凭据。
使用
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
。
后续步骤
- 详细了解对象版本控制。
- 了解如何使用对象生命周期管理自动管理对象版本。