diff --git a/docs/developer/sdk/java.md b/docs/developer/sdk/java.md
index 385a1db..6c95fa1 100644
--- a/docs/developer/sdk/java.md
+++ b/docs/developer/sdk/java.md
@@ -18,10 +18,10 @@ rustfs-java-s3-demo/
├── pom.xml
└── src/
└── main/
- └── java/
- └── com/
- └── example/
- └── RustfsS3Example.java
+ └── java/
+ └── com/
+ └── example/
+ └── RustfsS3Example.java
```
### 1.2 添加依赖
@@ -30,11 +30,11 @@ rustfs-java-s3-demo/
```xml
-
- software.amazon.awssdk
- s3
- 2.25.27
-
+
+ software.amazon.awssdk
+ s3
+ 2.25.27
+
```
@@ -60,53 +60,53 @@ import java.nio.file.Paths;
public class RustfsS3Example {
- public static void main(String[] args) {
- // 1. 初始化 S3 客户端
- S3Client s3 = S3Client.builder()
- .endpointOverride(URI.create("http://192.168.1.100:9000")) // RustFS 地址
- .region(Region.US_EAST_1) // 可写死,RustFS 不校验 region
- .credentialsProvider(
- StaticCredentialsProvider.create(
- AwsBasicCredentials.create("rustfsadmin", "rustfssecret")
- )
- )
- .forcePathStyle(true) // 关键配置!RustFS 需启用 Path-Style
- .build();
-
- // 2. 创建 Bucket
- String bucket = "my-bucket";
- try {
- s3.createBucket(CreateBucketRequest.builder().bucket(bucket).build());
- System.out.println("Bucket created: " + bucket);
- } catch (BucketAlreadyExistsException | BucketAlreadyOwnedByYouException e) {
- System.out.println("Bucket already exists.");
- }
-
- // 3. 上传文件
- s3.putObject(
- PutObjectRequest.builder().bucket(bucket).key("hello.txt").build(),
- Paths.get("hello.txt")
- );
- System.out.println("Uploaded hello.txt");
-
- // 4. 下载文件
- s3.getObject(
- GetObjectRequest.builder().bucket(bucket).key("hello.txt").build(),
- Paths.get("downloaded-hello.txt")
- );
- System.out.println("Downloaded hello.txt");
-
- // 5. 列出对象
- ListObjectsV2Response listResponse = s3.listObjectsV2(ListObjectsV2Request.builder().bucket(bucket).build());
- listResponse.contents().forEach(obj -> System.out.println("Found object: " + obj.key()));
-
- // 6. 删除对象
- s3.deleteObject(DeleteObjectRequest.builder().bucket(bucket).key("hello.txt").build());
- System.out.println("Deleted hello.txt");
-
- // 7. 删除桶(可选)
- // s3.deleteBucket(DeleteBucketRequest.builder().bucket(bucket).build());
- }
+ public static void main(String[] args) {
+ // 1. 初始化 S3 客户端
+ S3Client s3 = S3Client.builder()
+ .endpointOverride(URI.create("http://192.168.1.100:9000")) // RustFS 地址
+ .region(Region.US_EAST_1) // 可写死,RustFS 不校验 region
+ .credentialsProvider(
+ StaticCredentialsProvider.create(
+ AwsBasicCredentials.create("rustfsadmin", "rustfssecret")
+ )
+ )
+ .forcePathStyle(true) // 关键配置!RustFS 需启用 Path-Style
+ .build();
+
+ // 2. 创建 Bucket
+ String bucket = "my-bucket";
+ try {
+ s3.createBucket(CreateBucketRequest.builder().bucket(bucket).build());
+ System.out.println("Bucket created: " + bucket);
+ } catch (BucketAlreadyExistsException | BucketAlreadyOwnedByYouException e) {
+ System.out.println("Bucket already exists.");
+ }
+
+ // 3. 上传文件
+ s3.putObject(
+ PutObjectRequest.builder().bucket(bucket).key("hello.txt").build(),
+ Paths.get("hello.txt")
+ );
+ System.out.println("Uploaded hello.txt");
+
+ // 4. 下载文件
+ s3.getObject(
+ GetObjectRequest.builder().bucket(bucket).key("hello.txt").build(),
+ Paths.get("downloaded-hello.txt")
+ );
+ System.out.println("Downloaded hello.txt");
+
+ // 5. 列出对象
+ ListObjectsV2Response listResponse = s3.listObjectsV2(ListObjectsV2Request.builder().bucket(bucket).build());
+ listResponse.contents().forEach(obj -> System.out.println("Found object: " + obj.key()));
+
+ // 6. 删除对象
+ s3.deleteObject(DeleteObjectRequest.builder().bucket(bucket).key("hello.txt").build());
+ System.out.println("Deleted hello.txt");
+
+ // 7. 删除桶(可选)
+ // s3.deleteBucket(DeleteBucketRequest.builder().bucket(bucket).build());
+ }
}
```
@@ -167,24 +167,24 @@ import software.amazon.awssdk.services.s3.presigner.S3Presigner;
import software.amazon.awssdk.services.s3.presigner.model.GetObjectPresignRequest;
S3Presigner presigner = S3Presigner.builder()
- .endpointOverride(URI.create("http://192.168.1.100:9000"))
- .region(Region.US_EAST_1)
- .credentialsProvider(
- StaticCredentialsProvider.create(
- AwsBasicCredentials.create("rustfsadmin", "rustfssecret")
- )
- )
- .build();
+ .endpointOverride(URI.create("http://192.168.1.100:9000"))
+ .region(Region.US_EAST_1)
+ .credentialsProvider(
+ StaticCredentialsProvider.create(
+ AwsBasicCredentials.create("rustfsadmin", "rustfssecret")
+ )
+ )
+ .build();
GetObjectRequest getObjectRequest = GetObjectRequest.builder()
- .bucket("my-bucket")
- .key("hello.txt")
- .build();
+ .bucket("my-bucket")
+ .key("hello.txt")
+ .build();
GetObjectPresignRequest presignRequest = GetObjectPresignRequest.builder()
- .getObjectRequest(getObjectRequest)
- .signatureDuration(Duration.ofMinutes(15)) // 有效期 15 分钟
- .build();
+ .getObjectRequest(getObjectRequest)
+ .signatureDuration(Duration.ofMinutes(15)) // 有效期 15 分钟
+ .build();
PresignedGetObjectRequest presignedRequest = presigner.presignGetObject(presignRequest);
@@ -199,15 +199,15 @@ System.out.println("Presigned URL: " + presignedRequest.url());
```java
PutObjectRequest putRequest = PutObjectRequest.builder()
- .bucket("my-bucket")
- .key("upload.txt")
- .build();
+ .bucket("my-bucket")
+ .key("upload.txt")
+ .build();
PresignedPutObjectRequest presignedPut = presigner.presignPutObject(
- PutObjectPresignRequest.builder()
- .putObjectRequest(putRequest)
- .signatureDuration(Duration.ofMinutes(10))
- .build()
+ PutObjectPresignRequest.builder()
+ .putObjectRequest(putRequest)
+ .signatureDuration(Duration.ofMinutes(10))
+ .build()
);
System.out.println("Upload URL: " + presignedPut.url());
@@ -223,9 +223,9 @@ System.out.println("Upload URL: " + presignedPut.url());
```java
CreateMultipartUploadRequest createRequest = CreateMultipartUploadRequest.builder()
- .bucket("my-bucket")
- .key("bigfile.zip")
- .build();
+ .bucket("my-bucket")
+ .key("bigfile.zip")
+ .build();
CreateMultipartUploadResponse createResponse = s3.createMultipartUpload(createRequest);
String uploadId = createResponse.uploadId();
@@ -236,21 +236,21 @@ String uploadId = createResponse.uploadId();
```java
List completedParts = new ArrayList<>();
for (int i = 1; i <= 3; i++) {
- String partPath = "part" + i + ".bin"; // 假设每个 part 为本地文件
- UploadPartRequest uploadPartRequest = UploadPartRequest.builder()
- .bucket("my-bucket")
- .key("bigfile.zip")
- .uploadId(uploadId)
- .partNumber(i)
- .build();
-
- UploadPartResponse uploadPartResponse = s3.uploadPart(uploadPartRequest, Paths.get(partPath));
- completedParts.add(
- CompletedPart.builder()
- .partNumber(i)
- .eTag(uploadPartResponse.eTag())
- .build()
- );
+ String partPath = "part" + i + ".bin"; // 假设每个 part 为本地文件
+ UploadPartRequest uploadPartRequest = UploadPartRequest.builder()
+ .bucket("my-bucket")
+ .key("bigfile.zip")
+ .uploadId(uploadId)
+ .partNumber(i)
+ .build();
+
+ UploadPartResponse uploadPartResponse = s3.uploadPart(uploadPartRequest, Paths.get(partPath));
+ completedParts.add(
+ CompletedPart.builder()
+ .partNumber(i)
+ .eTag(uploadPartResponse.eTag())
+ .build()
+ );
}
```
@@ -258,15 +258,15 @@ for (int i = 1; i <= 3; i++) {
```java
CompletedMultipartUpload completedUpload = CompletedMultipartUpload.builder()
- .parts(completedParts)
- .build();
+ .parts(completedParts)
+ .build();
CompleteMultipartUploadRequest completeRequest = CompleteMultipartUploadRequest.builder()
- .bucket("my-bucket")
- .key("bigfile.zip")
- .uploadId(uploadId)
- .multipartUpload(completedUpload)
- .build();
+ .bucket("my-bucket")
+ .key("bigfile.zip")
+ .uploadId(uploadId)
+ .multipartUpload(completedUpload)
+ .build();
s3.completeMultipartUpload(completeRequest);
System.out.println("Multipart upload completed.");
@@ -276,10 +276,10 @@ System.out.println("Multipart upload completed.");
```java
AbortMultipartUploadRequest abortRequest = AbortMultipartUploadRequest.builder()
- .bucket("my-bucket")
- .key("bigfile.zip")
- .uploadId(uploadId)
- .build();
+ .bucket("my-bucket")
+ .key("bigfile.zip")
+ .uploadId(uploadId)
+ .build();
s3.abortMultipartUpload(abortRequest);
```