AWS java 检索所有 S3 密钥的 maven 项目

AWS java maven project to retrieve all the S3 keys

我已经为我的 AWS java 开发创建了一个 Maven 项目。我正在尝试获取具有给定前缀的 S3 存储桶中所有文件的列表。

这是我的代码:

app.java:

import com.amazonaws.regions.Regions;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.services.s3.model.*;
import com.amazonaws.services.s3.transfer.Copy;
import com.amazonaws.services.s3.transfer.TransferManager;
import com.amazonaws.services.s3.transfer.TransferManagerBuilder;

import java.io.InputStream;
import java.util.LinkedList;
import java.util.List;

class Main {

    public static List<String> getObjectsListFromS3(AmazonS3 s3, String bucket, String prefix) {
        final String delimiter = "/";
        if (!prefix.endsWith(delimiter)) {
            prefix = prefix + delimiter;
        }
    
        List<String> paths = new LinkedList<>();
        ListObjectsRequest request = new ListObjectsRequest().withBucketName(bucket).withPrefix(prefix);
    
        ObjectListing result;
        do {
            result = s3.listObjects(request);
    
            for (S3ObjectSummary summary : result.getObjectSummaries()) {
                // Make sure we are not adding a 'folder'
                if (!summary.getKey().endsWith(delimiter)) {
                    paths.add(summary.getKey());
                }
            }
            request.setMarker(result.getMarker());
        }
        while (result.isTruncated());
    
        return paths;
    }

    public static void main(String[] args) {
        String bucket = "playground-us-east-1-1234567890";
        AmazonS3 s3 = AmazonS3ClientBuilder.standard().withRegion("us-east-1").build();
    
        String prefix = "test";
        for (String key : getObjectsListFromS3(s3, bucket, prefix)) {
            System.out.println(key);
        }
    }
}

这是我的 pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.example.myapp</groupId>
  <artifactId>myapp</artifactId>
  <packaging>jar</packaging>
  <version>1.0-SNAPSHOT</version>
  <name>myapp</name>
  <url>http://maven.apache.org</url>
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
</project>

当我尝试 运行 代码 mvn package 时,出现以下错误:

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:compile (default-compile) on project myapp: Compilation failure
[ERROR] /home/user/Desktop/myapp/src/main/java/com/example/myapp/App.java:[35,41] diamond operator is not supported in -source 1.5
[ERROR]   (use -source 7 or higher to enable diamond operator)
[ERROR] 
[ERROR] -> [Help 1]
[ERROR] 
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR] 
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoFailureException

之前,我遇到了类似的错误,但我将 pom.xml 更改为 java version1 compatible。但是我不明白这个错误以及我哪里出错了

您正在为 Amazon S3 使用较旧的 API。您应该考虑转向 Java API V2。 V1 包名称是:

   **com.amazonaws.services..**.

而 V2 包名称是:

  **software.amazon.awssdk.services...**

亚马逊强烈建议迁移到 V2:

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

您可以在此 Github 存储库中找到具有所需依赖项的 POM 文件:

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

所有 S3 示例也位于此处。

更新

执行这些步骤以获得 Amazon S3 Java V2 代码示例 (ListObjects) 工作:

  1. 在类似 IntelliJ 的 IDE 中创建一个新的 Java Maven 项目。

  1. 从上面的 link 复制 POM 文件并将其放入您的 POM 文件。

  1. 创建一个名为 demo 的包。

  1. 在演示包中,创建一个名为 class 的 ListObjects。

  1. 从这里复制代码:

https://github.com/awsdocs/aws-doc-sdk-examples/blob/master/javav2/example_code/s3/src/main/java/com/example/s3/ListObjects.java

  1. 将此代码添加到您的 ListObjects class。

  1. 运行 代码并查看 IDE:
  2. 中的输出