接口 S3Client 和类 AmazonS3Client 之间的区别

问题描述

我正在创建一个需要 S3 客户端作为参数的方法。我不知道我应该声明它是什么类型。

这是 S3Client https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/s3/S3Client.html

的文档

自回答后忽略(这是 AmazonS3Client 的文档 https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/s3/AmazonS3Client.html 我的问题是推荐哪种类型,它们之间有什么区别?谢谢! )

更新:

在这里找到了另一个 S3 客户端:AmazonS3 接口。 https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/s3/AmazonS3.html

但是,类型 setobjectTagging 不支持 AmazonS3,但类型 S3Client 支持

AmazonS3 是否提供比 S3Client 更多的功能? 如果我需要 AmazonS3 中的某些函数而不是 S3Client 中的某些函数,或者 S3Client 中的某些函数而不是 AmazonS3 中的某些函数怎么办?

解决方法

AWS SDK for Java 有两个版本:V1 和 V2。 AmazonS3Client 是较旧的 V1 版本,而 S3Client 是较新的 V2 版本。

亚马逊推荐使用 V2:

适用于 Java 2.x 的 AWS 开发工具包是对 1.x 版代码库的主要重写。它构建在 Java 8+ 之上,并添加了几个经常请求的功能。其中包括对非阻塞 I/O 的支持以及在运行时插入不同 HTTP 实现的能力。

您可以在此处的 Java Developer V2 DEV Guide 中找到 Amazon S3 V2 代码示例:

Developer guide - AWS SDK for Java 2.x

(此时,Amazon S3 服务指南中没有 V2 示例。)

此外,您可以在此处找到 AWS Github 中的所有 Amazon S3 V2 代码示例:

https://github.com/awsdocs/aws-doc-sdk-examples/tree/master/javav2/example_code/s3

如果您不熟悉使用 AWS SDK for Java V2 开发应用程序,建议您从这里开始:

Get started with the AWS SDK for Java 2.x

(本入门主题碰巧使用 Amazon S3 Java V2 API 来帮助您启动并运行适用于 Java V2 的 AWS 开发工具包)

更新

您说:但是,类型 AmazonS3 不支持 setObjectTagging,但支持 S3Client 类型

使用 Java V2 API 在 Amazon S3 存储桶中标记对象的方法是使用以下代码:

  // First need to get existing tag set; otherwise the existing tags are overwritten.
     GetObjectTaggingRequest getObjectTaggingRequest = GetObjectTaggingRequest.builder()
            .bucket(bucketName)
            .key(key)
            .build();

GetObjectTaggingResponse response = s3.getObjectTagging(getObjectTaggingRequest);

// Get the existing immutable list - cannot modify this list.
List<Tag> existingList = response.tagSet();
ArrayList<Tag> newTagList = new ArrayList(new ArrayList<>(existingList));

// Create a new tag.
Tag myTag = Tag.builder()
        .key(label)
        .value(LabelValue)
        .build();

// push new tag to list.
newTagList.add(myTag);
Tagging tagging = Tagging.builder()
        .tagSet(newTagList)
        .build();

PutObjectTaggingRequest taggingRequest = PutObjectTaggingRequest.builder()
        .key(key)
        .bucket(bucketName)
        .tagging(tagging)
        .build();

s3.putObjectTagging(taggingRequest);