在locahost的Java應用程式中以AWS提供的aws-sdk-java-v2
來取得S3 bucket objects清單。
注意本篇取得的是objects的metadata而非object的內容。
範例環境:
- Java 11
- Maven
事前要求
參考「AWS 建立IAM管理使用者及credentials」設定供應用程式存取AWS需要的IAM管理員credentials。
參考「AWS 建立S3 bucket並上傳檔案」建立S3 bucket及上傳hello.txt檔案。
下載AWS SDK for Java 2.x
在專案的pom.xml
加入以下需要的AWS SDK for Java的S3依賴。
<dependencyManagement>
<dependencies>
<dependency>
<groupId>software.amazon.awssdk</groupId>
<artifactId>bom</artifactId>
<version>2.15.0</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependency>
<groupId>software.amazon.awssdk</groupId>
<artifactId>s3</artifactId>
</dependency>
範例的pom.xml
如下。
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.abc</groupId>
<artifactId>java-demo</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<java.version>11</java.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>software.amazon.awssdk</groupId>
<artifactId>bom</artifactId>
<version>2.15.0</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
...
<dependency>
<groupId>software.amazon.awssdk</groupId>
<artifactId>s3</artifactId>
</dependency>
</dependencies>
...
</project>
設定完pom.xml
後在專案根目錄已命令列執行mvn install
下載依賴。
存取S3 bucket
下面在Java程式呼叫S3Client.builder()
建立S3Client
來存取S3 bucket objects。AWS SDK預設會讀取$HOME/.aws/credentials
的access keys來通過權限驗證。然後用ListObjectsRequest.builder()
設定存取區域。最後用S3Client.listObjects
取得bucket中的物件清單。
Main.java
package com.abc.demo;
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.s3.S3Client;
import software.amazon.awssdk.services.s3.model.ListObjectsRequest;
import software.amazon.awssdk.services.s3.model.ListObjectsResponse;
import software.amazon.awssdk.services.s3.model.S3Object;
import java.util.List;
import java.util.ListIterator;
public class Main {
public static void main(String[] arges) {
S3Client s3Client = S3Client.builder()
.region(Region.AP_NORTHEAST_1)
.build();
ListObjectsRequest listObjectsRequest = ListObjectsRequest.builder()
.bucket("s3-demo-bucket-202112151320") // bucket name
.build();
ListObjectsResponse res = s3Client.listObjects(listObjectsRequest);
List<S3Object> s3ObjectList = res.contents();
for (S3Object s3Object : s3ObjectList) {
System.out.print("key=" + s3Object.key());
}
}
}
測試
執行Java應用程式輸出以下結果,key為S3 bucket中的檔案名稱。
key=hello.txt
沒有留言:
張貼留言