使用 Amazon S3 - Amazon SDK for Java 2.x
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

使用 Amazon S3

本节提供使用使用 Amazon S3 的背景信息 Amazon SDK for Java 2.x。本节补充了本指南的代码示例部分中介绍的 Amazon S3 Java v2 示例

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

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

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

Amazon CRT基于 S3 客户端

接口:S3 AsyncClient

生成器:S3 CrtAsyncClientBuilder

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

  • 需要aws-crt依赖关系。

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

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

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

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

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

  • 您希望在网络出现故障时提高传输可靠性。重试单个故障部件,无需从一开始就重新开始传输。

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

  • 需要额外的依赖关系。

启用了多部分功能的基于 Java 的 S3 异客户端

接口:S3 AsyncClient

生成器:S3 AsyncClientBuilder

  • 提供异步模式API。

  • 在创建时启用多部分时,支持自动并行传输(多部分)。

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

  • 您的应用程序传输大型对象,您希望提高性能。

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

  • 您希望在网络出现故障时提高传输可靠性。重试单个故障部件,无需从一开始就重新开始传输。

  • 您需要在 Amazon CRT基于的 S3 客户端中不可用的配置选项

性能低于 Amazon CRT基于的 S3 客户端。

启用多部分功能的基于 Java 的 S3 异步客户端

接口:S3 AsyncClient

生成器:S3 AsyncClientBuilder

  • 提供异步模式API。

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

  • 你想要一个异步的API。

没有性能优化。

基于 Java 的 S3 同步客户端

接口:S3Client

生成器:S3 ClientBuilder

  • 提供同步API。

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

  • 你想要一个同步的API。

没有性能优化。

注意

从版本 2.18.x 及更高版本开始,在包含终端 Amazon 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();