使用 Amazon S3 - AWS SDK for Java 2.x

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

使用 Amazon S3

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

AWS SDK for Java 2.x 中的 S3 客户端

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

Amazon S3 客户端的不同类型
S3 客户端 简短描述 何时使用 限制/缺点

基于 AWS CRT 的 S3 客户端

接口:S3AsyncClient

生成器:S3CrtAsyncClientBuilder

  • 提供与基于 Java 的 S3 异步客户端相同的异步 API 操作,但性能更高。

  • 需要 aws-crt 依赖项。

  • 支持自动并行传输(分段)。

请参阅使用高性能 S3 客户端:基于 AWS CRT 的 S3 客户端

  • 您的应用程序要传输大型对象(> 8MB),而您想要更大限度地提高性能。

  • 您想上传内容长度未知的对象。

  • 您需要增强的连接池和 DNS 负载平衡,从而提高吞吐量和性能。

  • 您希望在网络故障发生时提高传输的可靠性。重试各个失败的分段,而无需从头开始重新启动传输。

  • 与基于 Java 的 S3 客户端相比,支持的配置设置更少

  • 需要额外的依赖项。

基于 Java 的 S3 异步客户端,启用了分段功能

接口:S3AsyncClient

生成器:S3AsyncClientBuilder

  • 提供异步 API。

  • 如果在创建时启用分段时,则支持自动并行传输(分段)。

请参阅将基于 Java 的 S3 异步客户端配置为使用并行传输

  • 您的应用程序要传输大型对象,而您想要提高性能。

  • 您想上传内容长度未知的对象。

  • 您希望在网络故障发生时提高传输的可靠性。重试各个失败的分段,而无需从头开始重新启动传输。

  • 您需要基于 AWS CRT 的 S3 客户端没有提供的配置选项

性能不如基于 AWS CRT 的 S3 客户端。

基于 Java 的 S3 异步客户端,未启用分段功能

接口:S3AsyncClient

生成器:S3AsyncClientBuilder

  • 提供异步 API。

  • 您正在传输小于 8 MB 的对象。

  • 您想要一个异步 API。

没有性能优化。

基于 Java 的 S3 同步客户端

接口:S3Client

生成器:S3ClientBuilder

  • 提供同步 API。

  • 您正在传输小于 8 MB 的对象。

  • 您想要一个同步 API。

没有性能优化。

注意

从版本 2.18.x 开始,在包括端点覆盖时,AWS SDK for Java 2.x 使用虚拟托管式寻址。这适用于只要桶名称是有效 DNS 标签的所有情况。

在客户端生成器中使用 true 调用 forcePathStyle 方法,可强制客户端对桶使用路径式寻址。

以下示例显示了配置了端点覆盖并使用路径式寻址的服务客户端。

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