问题描述
我正在创建一个需要 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);