

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 使用 Amazon S3
<a name="examples-s3"></a>

本节提供有关使用 AWS SDK for Java 2.x来处理 Amazon S3 的背景信息。本节对本指南的*代码示例*部分中介绍的 [Amazon S3 Java v2 示例](java_s3_code_examples.md)作出了补充。

## 中的 S3 客户端 AWS SDK for Java 2.x
<a name="s3-clients"></a>

 AWS SDK for Java 2.x 提供了不同类型的 S3 客户端。下表显示了不同客户端的差异，可以帮助您确定哪种客户端更适合您的使用案例。


**Amazon S3 客户端的不同类型**  

| S3 客户端 | 简短描述 | 何时使用 | Limitation/drawback | 
| --- | --- | --- | --- | 
| **AWS CRT-based S3 客户端**<br />接口：[S3AsyncClient](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/s3/S3AsyncClient.html)<br />生成器：[S3CrtAsyncClientBuilder](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/s3/S3AsyncClient.html) | +  提供与 Java-based S3 异步客户端相同的异步 API 操作，但性能更高。 <br />+  需要 `aws-crt` 依赖项。 <br />+  支持自动并行传输（分段）。 请参阅[使用高性能 S3 客户端： AWS 基于 CRT 的 S3 客户端](crt-based-s3-client.md)。 |  +  您的应用程序要传输大型对象（> 8MB），而您想要更大限度地提高性能。 <br />+  您想上传内容长度未知的对象。 <br />+  您需要增强的连接池和 DNS 负载平衡，从而提高吞吐量和性能。 <br />+  您希望在网络故障发生时提高传输的可靠性。重试各个失败的分段，而无需从头开始重新启动传输。   |  +  支持的[配置设置比 Java-based S3 客户端少](crt-based-s3-client.md#crt-based-s3-client-limitations)。 <br />+  需要额外的依赖项。   | 
| **Java-based 启用了多部分功能的 S3 异*步*客户端**<br />接口：[S3AsyncClient](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/s3/S3AsyncClient.html)<br />生成器：[S3AsyncClientBuilder](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/s3/S3AsyncClientBuilder.html) | +  提供异步 API。 <br />+  如果在创建时启用分段时，则支持自动并行传输（分段）。 请参阅[将基于 Java 的 S3 异步客户端配置为使用并行传输](s3-async-client-multipart.md)。 |  +  您的应用程序要传输大型对象，而您想要提高性能。 <br />+  您想上传内容长度未知的对象。 <br />+  您希望在网络故障发生时提高传输的可靠性。重试各个失败的分段，而无需从头开始重新启动传输。 <br />+  您需要在 AWS CRT-based S3 客户端中不可用的[配置选项](crt-based-s3-client.md#crt-based-s3-client-limitations)。   | 性能不如 AWS CRT-based S3 客户端。 | 
| **Java-based *未*启用多部分功能的 S3 异步客户端**<br />接口：[S3AsyncClient](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/s3/S3AsyncClient.html)<br />生成器：[S3AsyncClientBuilder](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/s3/S3AsyncClientBuilder.html) |  +  提供异步 API。   |  +  您正在传输小于 8 MB 的对象。 <br />+  您想要一个异步 API。   | 没有性能优化。 | 
| **Java-based S3 同步客户端**<br />接口：[S3Client](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/s3/S3Client.html)<br />生成器：[S3ClientBuilder](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/s3/S3ClientBuilder.html) |  +  提供同步 API。   |  +  您正在传输小于 8 MB 的对象。 <br />+  您想要一个同步 API。   | 没有性能优化。 | 

**注意**  
从版本 2.18.x 及更高版本开始，在包含终端 AWS SDK for Java 2.x 节点覆盖时使用[虚拟托管式寻址](https://docs.aws.amazon.com/AmazonS3/latest/userguide/VirtualHosting.html#virtual-hosted-style-access)。这适用于只要桶名称是有效 DNS 标签的所有情况。  
在客户端生成器中使用 `true` 调用 [`forcePathStyle`](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/s3/S3BaseClientBuilder.html#forcePathStyle(java.lang.Boolean) 方法，可强制客户端对桶使用路径式寻址。  
以下示例显示了配置了端点覆盖并使用路径式寻址的服务客户端。  

```
S3Client client = S3Client.builder()
                          .region(Region.US_WEST_2)
                          .endpointOverride(URI.create("https://s3.us-west-2.amazonaws.com"))
                          .forcePathStyle(true)
                          .build();
```

**Topics**
+ [SDK 中的 S3 客户端](#s3-clients)
+ [将流上传到 S3](best-practices-s3-uploads.md)
+ [Pre-signed 网址](examples-s3-presign.md)
+ [跨区域访问](s3-cross-region.md)
+ [使用校验和实现数据完整性保护](s3-checksums.md)
+ [使用高性能 S3 客户端](crt-based-s3-client.md)
+ [配置并行传输支持](s3-async-client-multipart.md)
+ [传输文件和目录](transfer-manager.md)
+ [S3 事件通知](examples-s3-event-notifications.md)