# 如何在上传或修改对象时指定 S3 存储类别
在 Amazon S3 中,您可以根据需求为对象选择特定的存储类别。若上传新对象时未指定存储类别,通用存储桶中的对象将默认使用 Amazon S3 Standard(STANDARD)存储类别。
## 为新上传的对象设置存储类别
当通过控制台上传文件时,可在上传窗口中选择“属性”,然后在“存储类别”下拉菜单中选定所需的类别。对于 API 调用(如 PutObject、POST Object 或 CreateMultipartUpload),需在请求头中添加 `x-amz-storage-class` 字段。例如,使用 AWS CLI 上传大文件至 GLACIER 存储类别的命令如下:
```bash
aws s3 cp large_test_file s3://amzn-s3-demo-bucket1 --storage-class GLACIER
```
## 修改现有对象的存储类别
对于已存在于通用存储桶中的对象,可通过以下方式更改其存储类别:
- **AWS 管理控制台**:仅适用于小于 5GB 的对象。在控制台中选中目标对象,选择“操作”菜单下的“编辑存储类别”,然后从列表中选择新类别并保存。
- **API 或 CLI**:使用 CopyObject 操作将对象复制至同一位置但指定新的存储类别。例如,将对象更改为 DEEP_ARCHIVE 存储类别的命令如下:
```bash
aws s3 cp object_S3_URI object_S3_URI --storage-class DEEP_ARCHIVE
```
## 注意事项
- 目录存储桶中的对象不支持更改存储类别。
- 可通过 S3 Lifecycle 配置自动调整对象存储类别。
- 在设置 S3 复制配置时,可将复制对象的存储类别设为其他类别,但无法复制处于 S3 Glacier Flexible Retrieval 或 S3 Glacier Deep Archive 存储类别的对象。
## 存储类别名称对照表
| 控制台显示名称 | API 值 |
|----------------|--------|
| Reduced Redundancy Storage | 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 |
此外,在访问策略中可使用 `s3:x-amz-storage-class` 条件键限制上传对象时使用的存储类别。