【问题标题】:difference between Interface S3Client and Class AmazonS3Client接口 S3Client 和类 AmazonS3Client 之间的区别
【发布时间】:2021-08-28 18:47:11
【问题描述】:

我正在创建一个需要 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

但是,AmazonS3 类型不支持setObjectTagging,但S3Client 类型支持。

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

【问题讨论】:

    标签: amazon-web-services amazon-s3 aws-java-sdk


    【解决方案1】:

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

    亚马逊推荐使用 V2:

    AWS SDK for Java 2.x 是对 1.x 版代码库的重大改写。它建立在 Java 8+ 之上,并添加了几个经常请求的特性。其中包括对非阻塞 I/O 的支持以及在运行时插入不同 HTTP 实现的能力。

    您可以在此处的 Java Developer V2 开发指南中找到 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);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-03-29
      • 2016-12-05
      • 2011-04-07
      • 1970-01-01
      • 2011-12-28
      • 2011-12-17
      • 2012-03-18
      • 1970-01-01
      相关资源
      最近更新 更多