为了账号安全,请及时绑定邮箱和手机立即绑定

Amazon SDK Java v2 S3Client listObjects 抛出

Amazon SDK Java v2 S3Client listObjects 抛出

慕慕森 2023-06-08 19:10:24
我已经使用名称保存了AWS S3模仿文件夹结构的文件。sample.jpeg例如文件夹下的文件ABC将被命名为ABC/sample.jpeg我正在尝试使用 Java SDK v2 以编程方式删除这些文件夹。我正在尝试使用列出这些文件prefix。例如,在上面的示例中,我试图列出ABC存储桶中所有具有前缀的文件。ListObjectsRequest有问题的是,如果没有这个前缀,SDK 会很好地列出文件,但是我在下面的代码中显示的前缀,它会抛出s3Exception. 异常本身有一个awsErrorDetails属性,它有一个sdkHttpResponse包装statusCode:302和statusText:"Moved Temporarily"这是我正在使用的代码片段:    ListObjectsRequest listObjectsRequest = ListObjectsRequest.builder()            .bucket(this.bucketName)            .prefix(path)            .build();    List<ObjectIdentifier> objectIds = s3client.listObjects(listObjectsRequest)            .contents()            .stream()            .map(s3Object -> ObjectIdentifier.builder().key(s3Object.key()).build())            .collect(toList());以下是我的依赖项pom.xml:      <properties>           <aws-sdk.version>2.7.22</aws-sdk.version>      </properties>    ...        <!-- Amazon Web Services -->        <dependency>            <groupId>software.amazon.awssdk</groupId>            <artifactId>s3</artifactId>            <version>${aws-sdk.version}</version>        </dependency>        <dependency>            <groupId>software.amazon.awssdk</groupId>            <artifactId>auth</artifactId>            <version>${aws-sdk.version}</version>        </dependency>
查看完整描述

4 回答

?
qq_遁去的一_1

TA贡献1725条经验 获得超7个赞

问题在于 aws 对org.apache.httpcomponents:httpclient.


所需的最低版本httpclient是4.5.9. 如果你在你的项目pom中降级那个版本,那么就会出现这个问题。


要检查您正在运行的版本,请尝试:


mvn dependency:tree

找出httpclient版本。这是我的样子:


[INFO] |  +- software.amazon.awssdk:apache-client:jar:2.8.4:runtime

[INFO] |  |  +- org.apache.httpcomponents:httpclient:jar:4.5.10:runtime

[INFO] |  |  |  \- commons-codec:commons-codec:jar:1.11:runtime

[INFO] |  |  \- org.apache.httpcomponents:httpcore:jar:4.4.12:runtime

解决方案:

如果您通过使用任何 bom 或依赖管理来降级版本(在我的例子中spring-boot-starter-parent:2.1.5.RELEASE导致了这种情况发生),那么只需将其添加到您的 pom & 它应该可以工作:


<dependency>

    <groupId>org.apache.httpcomponents</groupId>

    <artifactId>httpclient</artifactId>

    <version>4.5.9</version>

</dependency>


查看完整回答
反对 回复 2023-06-08
?
慕容3067478

TA贡献1773条经验 获得超3个赞

将以下依赖项添加到 pom 文件将解决此问题。

<dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpclient</artifactId>
    <version>4.5.9</version>
</dependency>


查看完整回答
反对 回复 2023-06-08
?
明月笑刀无情

TA贡献1828条经验 获得超4个赞

我已经在我的机器上运行了您的代码(使用相同的 AWS SDK 版本),但我无法重现异常。


查看完整回答
反对 回复 2023-06-08
?
慕桂英546537

TA贡献1848条经验 获得超10个赞

您是否可以比较实例s3client(旧版本和有问题的新版本 AWS SDK for Java)。请分享。

可能需要调试和检查。可能两者之间的默认值可能不同。例如,如果默认区域不同,您将无法使用新的 SDK 获得以前保存的对象而无需更改。

此外,由于您正在迁移到主要修订版,因此您很可能会在以后发现更多问题。

查看完整回答
反对 回复 2023-06-08
  • 4 回答
  • 0 关注
  • 236 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信