

# 将对象上传到目录存储桶
<a name="directory-buckets-objects-upload"></a>

创建 Amazon S3 目录桶后，可以将对象上传到该桶。以下示例显示如何使用 S3 控制台和 AWS SDK 将对象上传到目录桶。有关使用 S3 Express One Zone 进行批量上传对象操作的信息，请参阅[对象管理](directory-bucket-high-performance.md#s3-express-features-object-management)。

## 使用 S3 控制台
<a name="directory-bucket-upload-console"></a>

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

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

1. 选择要将文件夹或文件上传到的桶的名称。

1. 在**对象**列表中，选择**上传**。

1. 在**上传**页面上，执行以下操作之一：
   + 将文件和文件夹拖放到虚线上传区域。
   + 选择**添加文件**或**添加文件夹**，选择要上传的文件或文件夹，然后选择**打开**或**上传**。

1. 在**校验和**下，选择要使用的**校验和函数**。

   （可选）如果您要上传大小不到 16MB 的单个对象，也可以指定预先计算的校验和值。当您提供预先计算的值时，Amazon S3 会将该值与它使用所选校验和函数计算的值进行比较。如果值不匹配，则上传不会开始。

1. **权限**和**属性**部分中的选项会自动设置为默认设置，无法修改。将自动启用“屏蔽公共访问权限”，而无法为目录桶启用 S3 版本控制和 S3 对象锁定。

   （可选）如果要以键值对的形式向对象添加元数据，请展开**属性**部分，然后在**元数据**部分中选择**添加元数据**。

1. 要上传列出的文件和文件夹，请选择**上传**。

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

## 使用 AWS SDK
<a name="directory-bucket-upload-sdks"></a>

------
#### [ SDK for Java 2.x ]

**Example**  

```
public static void putObject(S3Client s3Client, String bucketName, String objectKey, Path filePath) {
       //Using File Path to avoid loading the whole file into memory
       try {
           PutObjectRequest putObj = PutObjectRequest.builder()
                   .bucket(bucketName)
                   .key(objectKey)
                   //.metadata(metadata)
                   .build();
           s3Client.putObject(putObj, filePath);               
           System.out.println("Successfully placed " + objectKey +" into bucket "+bucketName);
                                              
       }
       
       catch (S3Exception e) {
           System.err.println(e.getMessage());
           System.exit(1);
       }
}
```

------
#### [ SDK for Python ]

**Example**  

```
import boto3
import botocore
from botocore.exceptions import ClientError
    
    
def put_object(s3_client, bucket_name, key_name, object_bytes):
    """  
    Upload data to a directory bucket.
    :param s3_client: The boto3 S3 client
    :param bucket_name: The bucket that will contain the object
    :param key_name: The key of the object to be uploaded
    :param object_bytes: The data to upload
    """
    try:
        response = s3_client.put_object(Bucket=bucket_name, Key=key_name,
                             Body=object_bytes)
        print(f"Upload object '{key_name}' to bucket '{bucket_name}'.") 
        return response
    except ClientError:    
        print(f"Couldn't upload object '{key_name}' to bucket '{bucket_name}'.")
        raise

def main():
    # Share the client session with functions and objects to benefit from S3 Express One Zone auth key
    s3_client = boto3.client('s3')
    # Directory bucket name must end with --zone-id--x-s3
    resp = put_object(s3_client, 'doc-bucket-example--use1-az5--x-s3', 'sample.txt', b'Hello, World!')
    print(resp)

if __name__ == "__main__":
    main()
```

------

## 使用 AWS CLI
<a name="directory-upload-object-cli"></a>

以下 `put-object` 示例命令显示如何使用 AWS CLI 从 Amazon S3 上传对象。要运行此命令，请将 `user input placeholders` 替换为您自己的信息。

```
aws s3api put-object --bucket bucket-base-name--zone-id--x-s3 --key sampleinut/file001.bin --body bucket-seed/file001.bin
```

有关更多信息，请参阅《AWS CLI Command Reference》**中的 [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)。

**Topics**
+ [对目录桶使用分段上传](s3-express-using-multipart-upload.md)