

# 设置对象的存储类
<a name="sc-howtoset"></a>

可以在上传对象时为其指定存储类。如果未指定，则 Amazon S3 对通用存储桶中的对象使用默认 Amazon S3 Standard 存储类。还可以通过使用 Amazon S3 控制台、AWS SDK 或 AWS Command Line Interface（AWS CLI），将已存储在 Amazon S3 通用存储桶中的对象的存储类更改为任何其它存储类。所有这些方法都使用 Amazon S3 API 操作将请求发送到 Amazon S3。

**注意**  
您无法更改存储在目录存储桶中的对象的存储类。

可以通过向存储桶添加 S3 生命周期配置来指示 Amazon S3 自动更改对象的存储类。有关更多信息，请参阅 [管理对象的生命周期](object-lifecycle-mgmt.md)。

在设置 S3 复制配置时，可以将已复制对象的存储类设置为其它任何存储类。但是，您无法复制存储在 S3 Glacier Flexible Retrieval 或 S3 Glacier Deep Archive 存储类中的对象。有关更多信息，请参阅 [复制配置文件元素](replication-add-config.md)。

以编程方式设置存储类时，需要提供存储类的值。以下是存储类的控制台名称及其相应 API 值的列表：
+ **低冗余存储**：`REDUCED_REDUNDANCY`
+ **S3 Express One Zone** – `EXPRESS_ONEZONE`
+ **S3 Glacier Deep Archive** – `DEEP_ARCHIVE`
+ **S3 Glacier Flexible Retrieval** – `GLACIER`
+ **S3 Glacier Instant Retrieval** – `GLACIER_IR`
+ **S3 Intelligent-Tiering** – `INTELLIGENT_TIERING`
+ **S3 One Zone-IA** – `ONEZONE_IA`
+ **S3 Standard** – `STANDARD`
+ **S3 Standard-IA** – `STANDARD_IA`

## 设置新对象的存储类
<a name="setting-storage-class"></a>

要在上传对象时设置存储类，可以使用以下方法。

### 使用 S3 控制台
<a name="setting-storage-class-console"></a>

要在控制台中上传新对象时设置存储类，请执行以下操作：

1. 登录到 AWS 管理控制台，然后通过以下网址打开 Amazon S3 控制台：[https://console.aws.amazon.com/s3/](https://console.aws.amazon.com//s3)。

1. 在左侧导航窗格中，选择**通用存储桶**。

1. 在存储桶列表中，选择要将文件夹和文件上传到的存储桶的名称。

1. 请选择 **Upload**（上传）。

1. 在**上传**窗口中，选择**属性**。

1. 在“存储类”下，为正在上传的文件选择存储类。

1. （可选）为您正在上传的文件配置任何其它属性。有关更多信息，请参阅[上传对象](upload-objects.md)

1. 在上传窗口中，执行下列操作之一：
   + 将文件和文件夹拖到“上传”窗口。
   + 选择**添加文件**或**添加文件夹**，选择要上传的文件或文件夹，然后选择**打开**。

1. 在页面底部，选择**上传**。

### 使用 REST API
<a name="setting-storage-class-rest"></a>

使用 `PutObject`、`POST Object` 和 `CreateMultipartUpload` API 操作创建对象时，可以在对象上指定存储类，并添加 `x-amz-storage-class` 标头。如果您未添加此标头，Amazon S3 将使用默认的 S3 Standard (`STANDARD`) 存储类。

此示例请求使用 `[PutObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html)` 命令将新对象的存储类设置为 S3 Intelligent-Tiering：

```
PUT /my-image.jpg HTTP/1.1
Host: amzn-s3-demo-bucket1.s3.Region.amazonaws.com 
Date: Wed, 12 Oct 2009 17:50:00 GMT 
Authorization: authorization string 
Content-Type: image/jpeg 
Content-Length: 11434 
Expect: 100-continue 
x-amz-storage-class: INTELLIGENT_TIERING
```

### 使用 AWS CLI
<a name="setting-storage-class-rest"></a>

此示例使用 `put-object` 命令将 *my\$1images.tar.bz2* 上传到 `GLACIER ` 存储类别中的 **amzn-s3-demo-bucket1**：

```
aws s3api put-object --bucket amzn-s3-demo-bucket1 --key dir-1/my_images.tar.bz2 --storage-class GLACIER --body my_images.tar.bz2
```

如果对象大小超过 5 GB，请使用以下命令来设置存储类：

```
aws s3 cp large_test_file s3://amzn-s3-demo-bucket1 --storage-class GLACIER
```

## 更改现有对象的存储类
<a name="changing-storage-class"></a>

要在上传对象时设置存储类，可以使用以下方法。

### 使用 S3 控制台
<a name="changing-storage-class-console"></a>

如果对象大小小于 5 GB，则可以使用 Amazon S3 控制台来更改对象的存储类。如果更大，我们建议添加 S3 生命周期配置来更改对象的存储类。

要在控制台中更改对象的存储类，请执行以下操作：

1. 登录到 AWS 管理控制台，然后通过以下网址打开 Amazon S3 控制台：[https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)。

1. 在左侧导航窗格中，选择**通用存储桶**。

1.  在存储桶列表中，选择包含您想要更改的对象的存储桶的名称。

1. 选中待更改对象的名称左侧的复选框。

1. 在**操作**菜单上，从显示的选项列表中选择**编辑存储类**。

1. 从可用于对象的存储类中进行选择。

1. 在**其它复制设置**下，选择是要**复制源设置**、**请勿指定设置**还是**指定设置**。**复制源设置**是默认选项。如果您只想复制不带源设置属性的对象，请选择**请勿指定设置**。选择**指定设置**，来指定存储类、ACL、对象标签、元数据、服务器端加密和其它校验和的设置。

1. 选择右下角的**保存更改**。Amazon S3 将保存更改。

### 使用 REST API
<a name="changing-storage-class-rest"></a>

要更改现有对象的存储类，请使用以下方法。

此示例请求使用 `[PutObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html)` 命令将现有对象的存储类设置为 S3 Intelligent-Tiering：

```
PUT /my-image.jpg HTTP/1.1
Host: amzn-s3-demo-bucket1.s3.Region.amazonaws.com 
Date: Wed, 12 Oct 2009 17:50:00 GMT 
Authorization: authorization string 
Content-Type: image/jpeg 
Content-Length: 11434 
Expect: 100-continue 
x-amz-storage-class: INTELLIGENT_TIERING
```

### 使用 AWS CLI
<a name="setting-storage-class-rest"></a>

此示例使用 `cp` 命令将现有对象的存储类别从其当前存储类别更改为 `DEEP_ARCHIVE ` 存储类别：

```
aws s3 cp object_S3_URI object_S3_URI --storage-class DEEP_ARCHIVE
```

## 将访问策略权限限制到特定存储类
<a name="restricting-storage-class"></a>

在授予 Amazon S3 操作的访问策略权限时，您可以使用 `s3:x-amz-storage-class` 条件键限制存储上传的对象时使用的存储类。例如，授予 `s3:PutObject` 权限时，您可以将对象上传限制到特定的存储类。有关策略示例，请参阅 [示例：将对象上传限制为具有特定存储类的对象](security_iam_service-with-iam.md#example-storage-class-condition-key)。

有关在策略中使用条件的更多信息和 Amazon S3 条件键的完整列表，请参阅以下主题：
+ 《Service Authorization Reference》**中的 [Actions, resources, and condition keys for Amazon S3](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazons3.html)。

  有关按 S3 资源类型对 S3 API 操作的权限的更多信息，请参阅 [Amazon S3 API 操作所需的权限](using-with-s3-policy-actions.md)。
+ [使用条件键的存储桶策略示例](amazon-s3-policy-keys.md)