猿问

Amazon SDK Java v2 S3Client listObjects 抛出

我已经使用名称保存了AWS S3模仿文件夹结构的文件。

sample.jpeg例如文件夹下的文件ABC将被命名为ABC/sample.jpeg

我正在尝试使用 Java SDK v2 以编程方式删除这些文件夹。我正在尝试使用列出这些文件prefix

例如,在上面的示例中,我试图列出ABC存储桶中所有具有前缀的文件。

ListObjectsRequest有问题的是,如果没有这个前缀,SDK 会很好地列出文件,但是我在下面的代码中显示的前缀,它会抛出s3Exception. 异常本身有一个awsErrorDetails属性,它有一个sdkHttpResponse包装statusCode:302statusText:"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>


慕慕森
浏览 237回答 4
4回答

qq_遁去的一_1

问题在于 aws 对org.apache.httpcomponents:httpclient.所需的最低版本httpclient是4.5.9. 如果你在你的项目pom中降级那个版本,那么就会出现这个问题。要检查您正在运行的版本,请尝试:mvn dependency:tree找出httpclient版本。这是我的样子:[INFO] |&nbsp; +- software.amazon.awssdk:apache-client:jar:2.8.4:runtime[INFO] |&nbsp; |&nbsp; +- org.apache.httpcomponents:httpclient:jar:4.5.10:runtime[INFO] |&nbsp; |&nbsp; |&nbsp; \- commons-codec:commons-codec:jar:1.11:runtime[INFO] |&nbsp; |&nbsp; \- org.apache.httpcomponents:httpcore:jar:4.4.12:runtime解决方案:如果您通过使用任何 bom 或依赖管理来降级版本(在我的例子中spring-boot-starter-parent:2.1.5.RELEASE导致了这种情况发生),那么只需将其添加到您的 pom & 它应该可以工作:<dependency>&nbsp; &nbsp; <groupId>org.apache.httpcomponents</groupId>&nbsp; &nbsp; <artifactId>httpclient</artifactId>&nbsp; &nbsp; <version>4.5.9</version></dependency>

慕容3067478

将以下依赖项添加到 pom 文件将解决此问题。<dependency> &nbsp;&nbsp;&nbsp;&nbsp;<groupId>org.apache.httpcomponents</groupId> &nbsp;&nbsp;&nbsp;&nbsp;<artifactId>httpclient</artifactId> &nbsp;&nbsp;&nbsp;&nbsp;<version>4.5.9</version> </dependency>

明月笑刀无情

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

慕桂英546537

您是否可以比较实例s3client(旧版本和有问题的新版本 AWS SDK for Java)。请分享。可能需要调试和检查。可能两者之间的默认值可能不同。例如,如果默认区域不同,您将无法使用新的 SDK 获得以前保存的对象而无需更改。此外,由于您正在迁移到主要修订版,因此您很可能会在以后发现更多问题。
随时随地看视频慕课网APP

相关分类

Java
我要回答