

# 通过通用存储桶的接入点上传对象
<a name="put-object-ap"></a>

本节介绍如何使用 AWS 管理控制台、AWS Command Line Interface或 REST API 通过通用存储桶的接入点上传对象。

## 使用 S3 控制台
<a name="put-object-ap-console"></a>

**在 AWS 账户中通过接入点上传对象。**

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

1. 在页面顶部的导航栏中，选择当前所显示 AWS 区域的名称。接下来，选择要列出其接入点的区域。

1. 在控制台左侧的导航窗格中，选择**接入点**。

1. （可选）按名称搜索接入点。只有您选择的 AWS 区域中的接入点才会出现在此处。

1. 选择要管理或使用的接入点的名称。

1. 在**对象**选项卡下，选择**上传**。

1. 将要上传的文件和文件夹拖放到此处，或者选择**添加文件**或**添加文件夹**。
**注意**  
可使用 Amazon S3 控制台上传的文件的最大大小为 160 GB。要上传大于 160GB 的文件，请使用 AWS Command Line Interface（AWS CLI）、AWS SDK 或 Amazon S3 REST API。

1. 要更改访问控制列表权限，请选择 **Permissions**（权限）。

1. 在 **Access control list (ACL)** [访问控制列表 (ACL)]下，编辑权限。

   有关对象访问权限的信息，请参阅 [使用 S3 控制台为对象设置 ACL 权限](managing-acls.md#set-object-permissions)。您可以向公众（世界上的每一个人）授予对您的对象的读取访问权限，使其能够获取您正在上传的所有文件。但是，我们建议您不要更改公共读取访问的默认设置。授予公有读取访问权限适用于一小部分的使用案例（如存储桶用于网站时）。您始终可以在上传对象后更改对象权限。

1. 要配置其他附加属性，请选择 **Properties**（属性）。

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

   有关存储类的更多信息，请参阅 [了解和管理 Amazon S3 存储类](storage-class-intro.md)。

1. 要更新对象的加密设置，请在**服务器端加密设置**下执行以下操作：

   1. 选择 **Specify an encryption key**（指定加密密钥）。

   1. 在**加密设置**下，选择**使用默认加密的存储桶设置**或**覆盖默认加密的存储桶设置**。

   1. 如果您选择**覆盖默认加密的存储桶设置**，则必须配置以下加密设置。
      + 要使用由 Amazon S3 托管的密钥加密上传的文件，请选择 **Amazon S3 托管式密钥（SSE-S3）**。

        有关更多信息，请参阅 [使用具有 Amazon S3 托管式密钥的服务器端加密（SSE-S3）](UsingServerSideEncryption.md)。
      + 要使用存储在 AWS Key Management Service（AWS KMS）中的密钥加密上传的文件，请选择 **AWS Key Management Service 密钥（SSE-KMS）**。然后，为 **AWS KMS 密钥**选择以下选项之一：
        + 要从可用的 KMS 密钥列表中进行选择，请选择**从您的 AWS KMS keys 中进行选择**，然后从可用密钥的列表中选择您的 **KMS 密钥**。

          AWS 托管式密钥（`aws/s3`）和您的客户自主管理型密钥都显示在此列表中。有关客户自主管理型密钥的更多信息，请参阅《AWS Key Management Service 开发人员指南》**中的[客户密钥和 AWS 密钥](https://docs.aws.amazon.com//kms/latest/developerguide/concepts.html#key-mgmt)。
        + 要输入 KMS 密钥 ARN，请选择**输入 AWS KMS key ARN**，然后在显示的字段中输入您的 KMS 密钥 ARN。
        + 要在 AWS KMS 控制台中创建新的客户自主管理型密钥，请选择**创建 KMS 密钥**。

          有关创建 AWS KMS key 的更多信息，请参阅《AWS Key Management Service 开发人员指南》**中的[创建密钥](https://docs.aws.amazon.com//kms/latest/developerguide/create-keys.html)。
**重要**  
您只能使用与存储桶所在相同的 AWS 区域中可用的 KMS 密钥。Amazon S3 控制台仅列出与存储桶位于同一区域中的前 100 个 KMS 密钥。要使用未列出的 KMS 密钥，您必须输入 KMS 密钥 ARN。如果您希望使用其他账户拥有的 KMS 密钥，则必须首先有权使用该密钥，然后必须输入相应的 KMS 密钥 ARN。  
Amazon S3 仅支持对称加密 KMS 密钥，不支持非对称 KMS 密钥。有关更多信息，请参阅《AWS Key Management Service 开发人员指南》**中的[确定对称和非对称 KMS 密钥](https://docs.aws.amazon.com//kms/latest/developerguide/find-symm-asymm.html)。

1. 要使用其他校验和，请选择 **On**（打开）。然后对于 **Checksum function**（校验和函数），选择要使用的函数。Amazon S3 在收到整个对象后计算并存储校验和值。您可以使用 **Precalculated value**（预计算值）框来提供预先计算的值。这样，Amazon S3 会将您提供的值与其计算的值进行比较。如果两个值不匹配，Amazon S3 将生成错误。

   其他校验和使您能够指定要用于验证数据的校验和算法。有关其他校验和的更多信息，请参阅[在 Amazon S3 中检查对象完整性](checking-object-integrity.md)。

1. 要向上传的所有对象添加标签，请选择 **Add tag (添加标签)**。在**键**字段中输入标签名称。输入标签的值。

   对象标签为您提供了对存储进行分类的方法。每个标签都是一个键-值对。键和标签值区分大小写。对于每个对象，您最多可以有 10 个标签。标签键的长度最大可以为 128 个 Unicode 字符，标签值的长度最大可以为 255 个 Unicode 字符。有关对象标签的更多信息，请参阅 [使用标签对对象进行分类](object-tagging.md)。

1. 要添加元数据，请选择**添加元数据**。

   1. 在**类型**下，请选择**系统定义**或**用户定义**。

      对于系统定义元数据，您可以选择通用的 HTTP 标头，如 **Content-Type** 和 **Content-Disposition**。有关系统定义元数据的列表以及您能否添加值的信息，请参阅[系统定义的对象元数据](UsingMetadata.md#SysMetadata)。以前缀 `x-amz-meta-` 开头的任何元数据都被视为用户定义的元数据。用户定义元数据会与对象存储在一起，并会在您下载该对象时返回。密钥及其值均必须符合 US-ASCII 标准。用户定义元数据最大可为 2 KB。如需详细了解系统定义和用户定义的元数据，请参阅[使用对象元数据](UsingMetadata.md)。

   1. 对于**键**，请选择一个键。

   1. 键入该键的值。

1. 要上传对象，请选择**上传**。

   Amazon S3 将上传您的对象。上传完成后，您可以在**上传：状态**页面上看到成功消息。

## 使用 AWS CLI
<a name="put-object-ap-cli"></a>

以下 `put-object` 示例命令显示了如何使用 AWS CLI 通过接入点上传您的对象。

以下命令使用接入点 *my-access-point* 上传 AWS 账户 *111122223333* 的对象 `puppy.jpg`。

```
aws s3api put-object --bucket arn:aws:s3:AWS 区域:111122223333:accesspoint/my-access-point --key puppy.jpg --body puppy.jpg      
```

**注意**  
S3 会自动为所有接入点生成接入点别名，这些接入点别名可以在任何使用存储桶名称来执行对象级操作的地方使用。有关更多信息，请参阅 [接入点别名](access-points-naming.md#access-points-alias)。

有关更多信息和示例，请参阅《AWS CLI 命令参考》**中的 [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3api/put-object.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3api/put-object.html)。

## 使用 REST API
<a name="put-object-ap-rest"></a>

您可以使用 REST API 通过接入点上传对象。有关更多信息，请参阅《Amazon Simple Storage Service API 参考》**中的 [https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html)。

## 使用 AWS SDK
<a name="put-object-ap-SDKs"></a>

可以使用适用于 Python 的 AWS SDK 通过接入点上传对象。

------
#### [ Python ]

在以下示例中，使用名为 *my-access-point* 的接入点为 AWS 账户 *111122223333* 上传名为 `hello.txt` 的文件。

```
import boto3
s3 = boto3.client('s3')
s3.upload_file('/tmp/hello.txt', 'arn:aws:s3:us-east-1:111122223333:accesspoint/my-access-point', 'hello.txt')
```

------