

# 使用已暂停版本控制的存储桶中的对象
<a name="VersionSuspendedBehavior"></a>

在 Amazon S3 中，您可以暂停版本控制，以停止在存储桶中累积同一对象的新版本。您可能这样做是因为您只想在存储桶中使用单个版本的对象。或者，您可能不想为多个版本累积费用。

暂停版本控制时，存储桶中的现有对象不会更改。更改的是 Amazon S3 在以后的请求中处理对象的方式。本部分中的主题介绍了暂停版本控制的存储桶中的各种对象操作，包括添加、检索和删除对象。

有关 S3 版本控制的更多信息，请参阅[使用 S3 版本控制保留对象的多个版本](Versioning.md)。有关检索对象版本的更多信息，请参阅 [从启用了版本控制的存储桶中检索对象版本](RetrievingObjectVersions.md)。

**Topics**
+ [将对象添加到已暂停版本控制的存储桶](AddingObjectstoVersionSuspendedBuckets.md)
+ [从已暂停版本控制的存储桶检索对象](RetrievingObjectsfromVersioningSuspendedBuckets.md)
+ [从已暂停版本控制的存储桶中删除对象](DeletingObjectsfromVersioningSuspendedBuckets.md)

# 将对象添加到已暂停版本控制的存储桶
<a name="AddingObjectstoVersionSuspendedBuckets"></a>

您可以将对象添加到 Amazon S3 中已暂停版本控制的存储桶中，以便创建具有空版本 ID 的对象，或者覆盖具有匹配版本 ID 的任何对象版本。

您在存储桶上暂停了版本控制后，Amazon S3 会自动将 `null` 版本 ID 添加到之后存储在该存储段中的每个后续对象（使用 `PUT`、`POST` 或 `CopyObject`）。

下图显示了当将对象添加到暂停版本控制的存储桶时，Amazon S3 将如何向该对象添加 `null` 的版本 ID。

![\[Amazon S3 在对象图形中添加的版本 ID 为 null。\]](http://docs.aws.amazon.com/zh_cn/AmazonS3/latest/userguide/images/versioning_PUT_versionSuspended.png)


如果存储桶中已存在空版本，且您使用同一键添加了其他对象，则添加的对象将覆盖原始的空版本。

如果存储桶中存在受版本控制的对象，则使用 `PUT` 存储的版本将成为该对象的当前版本。下图显示了如何将对象添加到包含受版本控制的对象（不会覆盖已存在于该存储桶中的对象）的存储桶。

在这种情况下，版本 111111 已存在于该存储桶中。Amazon S3 会将空的版本 ID 附加到所添加的对象，并将其存储在存储桶中。版本 111111 不会被覆盖。

![\[Amazon S3 在不覆盖版本 111111 图形的情况下向对象添加的版本 ID 为 null。\]](http://docs.aws.amazon.com/zh_cn/AmazonS3/latest/userguide/images/versioning_PUT_versionSuspended3.png)


如果存储桶中已存在空版本，则该空版本将被覆盖，如下图所示。

![\[Amazon S3 在覆盖原始内容图形的同时向对象添加的版本 ID 为 null。\]](http://docs.aws.amazon.com/zh_cn/AmazonS3/latest/userguide/images/versioning_PUT_versionSuspended4.png)


虽然空版本的键和版本 ID（`null`）在 `PUT` 之前和之后都相同，但是原来存储在存储桶中的空版本的内容将替换为该存储桶中对象 `PUT` 的内容。

# 从已暂停版本控制的存储桶检索对象
<a name="RetrievingObjectsfromVersioningSuspendedBuckets"></a>

无论是否在存储桶上启用版本控制，`GET Object` 请求都将返回对象的当前版本。下图显示了简单 `GET` 将如何返回对象的当前版本。

![\[图中显示了简单 GET 如何返回对象的当前版本。\]](http://docs.aws.amazon.com/zh_cn/AmazonS3/latest/userguide/images/versioning_GET_suspended.png)


# 从已暂停版本控制的存储桶中删除对象
<a name="DeletingObjectsfromVersioningSuspendedBuckets"></a>

您可以将对象从暂停版本控制的存储桶中删除，以便删除具有空版本 ID 的对象。

如果某个存储桶的版本控制已暂停，`DELETE` 请求：
+ 可以仅删除其版本 ID 为 `null` 的对象。
+ 如果存储桶中没有对象的空版本，则不删除任何内容。
+ 将删除标记插入到存储桶。

如果暂停存储桶版本控制，该操作会移除具有空 `versionId` 的对象。如果版本 ID 存在，Amazon S3 会插入删除标记，该删除标记将成为对象的当前版本。下图显示了简单的 `DELETE` 移除空版本和 Amazon S3 改而使用 `null` 版本 ID 在其位置中插入删除标记的方式。

![\[图中显示了简单删除，用于移除版本 ID 为 NULL 的对象。\]](http://docs.aws.amazon.com/zh_cn/AmazonS3/latest/userguide/images/versioning_DELETE_versioningSuspended.png)


要永久删除具有 `versionId` 的对象，必须在请求中包含对象的 `versionId`。由于删除标记不包含任何内容，因此，您将在删除标记替换 `null` 版本时丢失该版本的内容。

下图显示不具有空版本的存储桶。在这种情况下，`DELETE` 不会移除任何内容。而是 Amazon S3 仅仅插入一个删除标记。

![\[图中显示了删除标记插入。\]](http://docs.aws.amazon.com/zh_cn/AmazonS3/latest/userguide/images/versioning_DELETE_versioningSuspendedNoNull.png)


即使是在已暂停版本控制的存储桶中，存储桶拥有者也可以通过在 `DELETE` 请求中包括版本 ID 来永久删除指定的版本，除非已明确拒绝 `DELETE` 请求的权限。例如，要拒绝删除具有版本 ID `null` 的任何对象，您必须明确拒绝 `s3:DeleteObject` 和 `s3:DeleteObjectVersions` 权限。

下图显示删除指定的对象版本将永久删除该版本的对象。只有存储桶拥有者可以删除指定的对象版本。

![\[图中显示了使用指定版本 ID 永久删除对象。\]](http://docs.aws.amazon.com/zh_cn/AmazonS3/latest/userguide/images/versioning_DELETE_versioningEnabled2.png)
