Skip to content

Commit b6e82e9

Browse files
author
shvc
committed
feat: delete objects
1 parent baeafba commit b6e82e9

File tree

3 files changed

+70
-39
lines changed

3 files changed

+70
-39
lines changed

README.md

Lines changed: 33 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,11 @@
22
s3java is a java edition [s3cli](https://github.com/shvc/s3cli)
33
Inspired by [awssdk](https://github.com/awsdocs/aws-doc-sdk-examples) examples
44

5-
#### Download prebuild [binary](https://github.com/shvc/s3java/releases)
5+
#### Download prebuilt [binary](https://github.com/shvc/s3java/releases)
66

77
#### Or build fat jar from source
88
```
9+
# need gradle7 or above
910
git clone https://github.com/shvc/s3java
1011
cd s3java
1112
gradle jar
@@ -14,61 +15,62 @@ gradle jar
1415
## Usage
1516
#### Create alias
1617
```
17-
s3java='java -jar /path/to/s3java-1.1.jar'
18+
alias s3java="java -jar `pwd`/build/libs/s3java-1.2.jar"
1819
s3java -h
1920
```
21+
2022
#### Bucket
2123
```shell
2224
# create Bucket
23-
java -jar s3java-1.1.jar -e http://192.168.56.3:9000 -a root -s ChangeMe create-bucket bucket-name
25+
s3java -e http://127.0.0.1:9000 -a root -s ChangeMe create-bucket bucket-name
2426

2527
# list(ls) all my Buckets
26-
java -jar s3java-1.1.jar -e http://192.168.56.3:9000 -a root -s ChangeMe ls
28+
s3java -e http://127.0.0.1:9000 -a root -s ChangeMe ls
2729

2830
# head Bucket
29-
java -jar s3java-1.1.jar -e http://192.168.56.3:9000 -a root -s ChangeMe head bucket-name
31+
s3java -e http://127.0.0.1:9000 -a root -s ChangeMe head bucket-name
3032

3133
# delete Bucket
32-
java -jar s3java-1.1.jar -e http://192.168.56.3:9000 -a root -s ChangeMe delete bucket-name
34+
s3java -e http://127.0.0.1:9000 -a root -s ChangeMe delete bucket-name
3335
```
3436

3537
#### Object
36-
- upload(put) Objcet(s)
38+
- upload(put) Object(s)
3739
```shell
3840
# upload file(s)
39-
java -jar s3java-1.1.jar upload bucket-name/k0 --data KKKK # upload a Object(k0) with content KKKK
40-
java -jar s3java-1.1.jar upload bucket-name/k1 /etc/hosts # upload a file and specify Key(k1)
41-
java -jar s3java-1.1.jar --v2sign upload bucket-name/k2 /etc/hosts # upload(V2 sign) a file and specify Key(k2)
42-
java -jar s3java-1.1.jar upload bucket-name /etc/hosts # upload a file and use filename(hosts) as Key
43-
java -jar s3java-1.1.jar upload bucket-name *.txt # upload files and use filename as Key
44-
java -jar s3java-1.1.jar upload bucket-name/dir/ *.txt # upload files and set Prefix(dir/) to all uploaded Object
45-
java -jar s3java-1.1.jar --presign put bucket-name/k3 file # presign(V4) a PUT Object URL
46-
java -jar s3java-1.1.jar --presign --v2sign put bucket-name/k4 file # presign(V2) a PUT Object URL
41+
s3java upload bucket-name/k0 --data KKKK # upload a Object(k0) with content KKKK
42+
s3java upload bucket-name/k1 /etc/hosts # upload a file and specify Key(k1)
43+
s3java --v2sign upload bucket-name/k2 /etc/hosts # upload(V2 sign) a file and specify Key(k2)
44+
s3java upload bucket-name /etc/hosts # upload a file and use filename(hosts) as Key
45+
s3java upload bucket-name *.txt # upload files and use filename as Key
46+
s3java upload bucket-name/dir/ *.txt # upload files and set Prefix(dir/) to all uploaded Object
47+
s3java --presign put bucket-name/k3 file # presign(V4) a PUT Object URL
48+
s3java --presign --v2sign put bucket-name/k4 file # presign(V2) a PUT Object URL
4749
```
48-
- download(get) Object(s)
50+
- download(get) Object(s)
4951
```shell
5052
# download Object(s)
51-
java -jar s3java-1.1.jar download bucket-name/k0 # download Object(k0) to current dir
52-
java -jar s3java-1.1.jar --v2sign download bucket-name/k2 # download(V2 sign) Object(k2) to current dir
53-
java -jar s3java-1.1.jar download bucket-name/k1 k2 k3 # download Objects(k1, k2 and k3) to current dir
54-
java -jar s3java-1.1.jar --presign download bucket-name/k1 # presign(V4) a GET Object URL
55-
java -jar s3java-1.1.jar --presign --v2sign download bucket-name/k2 # presign(V2) a GET Object URL
53+
s3java download bucket-name/k0 # download Object(k0) to current dir
54+
s3java --v2sign download bucket-name/k2 # download(V2 sign) Object(k2) to current dir
55+
s3java download bucket-name/k1 k2 k3 # download Objects(k1, k2 and k3) to current dir
56+
s3java --presign download bucket-name/k1 # presign(V4) a GET Object URL
57+
s3java --presign --v2sign download bucket-name/k2 # presign(V2) a GET Object URL
5658
```
5759

58-
- list(ls) Objects
60+
- list(ls) Objects
5961
```shell
6062
# list Objects
61-
java -jar s3java-1.1.jar list bucket-name # list
62-
java -jar s3java-1.1.jar list bucket-name/prefix # list Objects with specified prefix
63-
java -jar s3java-1.1.jar list-v2 bucket-name # listObjects v2
64-
java -jar s3java-1.1.jar list-v2 bucket-name/prefix # listObjects v2 with specified prefix
63+
s3java list bucket-name # list
64+
s3java list bucket-name/prefix # list Objects with specified prefix
65+
s3java list-v2 bucket-name # listObjects v2
66+
s3java list-v2 bucket-name/prefix # listObjects v2 with specified prefix
6567
```
6668

67-
- delete(rm) Object(s)
69+
- delete(rm) Object(s)
6870
```shell
6971
# delete Object(s)
70-
java -jar s3java-1.1.jar delete bucket-name/k0 # delete an Object
71-
java -jar s3java-1.1.jar delete bucket-name/k1 k2 k3 # delete Objects
72-
java -jar s3java-1.1.jar --presign delete bucket-name/hosts # presign(V4) an DELETE Object URL
73-
java -jar s3java-1.1.jar --presign --v2sign delete bucket-name/k4 # presign(V2) an DELETE Object URL
72+
s3java delete bucket-name/k0 # delete an Object
73+
s3java delete bucket-name/k1 k2 k3 # delete Objects
74+
s3java --presign delete bucket-name/hosts # presign(V4) an DELETE Object URL
75+
s3java --presign --v2sign delete bucket-name/k4 # presign(V2) an DELETE Object URL
7476
```

src/main/java/org/shvc/s3java/Main.java

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ public class Main implements Runnable {
3737
"--endpoint" }, showDefaultValue = CommandLine.Help.Visibility.ALWAYS, description = "S3 endpoint")
3838
private String endpoint = DEFAULT_ENDPOINT;
3939

40-
@Option(names = { "-r",
40+
@Option(names = { "-R",
4141
"--region" }, showDefaultValue = CommandLine.Help.Visibility.ALWAYS, description = "S3 endpoint")
4242
private String region = Region.CN_Beijing.toString();
4343

@@ -281,13 +281,10 @@ void delete(
281281
String key = valueInStr(bucketKey, '/');
282282
if (keys == null && key.equals("")) {
283283
cli.deleteBucket(bucket);
284-
} else {
284+
} else if (keys == null) {
285285
cli.deleteObject(bucket, key);
286-
if (keys != null) {
287-
for (String k : keys) {
288-
cli.deleteObject(bucket, k);
289-
}
290-
}
286+
} else {
287+
cli.deleteObjects(bucket, keys, key);
291288
}
292289
}
293290

src/main/java/org/shvc/s3java/S3Cli.java

Lines changed: 33 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,16 +14,20 @@
1414
import com.amazonaws.services.s3.transfer.TransferManager;
1515
import com.amazonaws.services.s3.transfer.TransferManagerBuilder;
1616
import com.amazonaws.services.s3.transfer.Upload;
17+
import com.amazonaws.services.s3.model.DeleteObjectsRequest;
18+
import com.amazonaws.services.s3.model.DeleteObjectsRequest.KeyVersion;
1719

1820
import java.io.ByteArrayOutputStream;
1921
import java.io.File;
2022
import java.io.InputStream;
2123
import java.io.FileNotFoundException;
2224
import java.io.FileOutputStream;
25+
import java.util.ArrayList;
2326
import java.util.List;
2427
import java.util.Map;
2528
import java.net.URL;
2629
import java.time.Instant;
30+
2731
public class S3Cli {
2832
private AmazonS3 s3;
2933
private boolean presign;
@@ -98,7 +102,7 @@ public void listObjectsV2(String bucket, String prefix, boolean all) {
98102
public void listObjects(String bucketName, String prefix, boolean all) {
99103
ListObjectsRequest lsReq = new ListObjectsRequest();
100104
lsReq.setBucketName(bucketName);
101-
if(!prefix.equals("")) {
105+
if (!prefix.equals("")) {
102106
lsReq.setPrefix(prefix);
103107
}
104108
ObjectListing result = s3.listObjects(lsReq);
@@ -342,6 +346,34 @@ public void deleteObject(String bucketName, String key) {
342346
}
343347
}
344348

349+
public void deleteObjects(String bucketName, String[] keys, String key) {
350+
try {
351+
if (this.presign) {
352+
// Set the presigned URL
353+
System.out.println("not ready");
354+
return;
355+
}
356+
357+
ArrayList<KeyVersion> objects = new ArrayList<KeyVersion>();
358+
for (int i = 0; i < keys.length; i++) {
359+
objects.add(new KeyVersion(keys[i]));
360+
}
361+
if (key != null) {
362+
objects.add(new KeyVersion(key));
363+
}
364+
365+
DeleteObjectsRequest multiObjectDeleteRequest = new DeleteObjectsRequest(bucketName)
366+
.withKeys(objects)
367+
.withQuiet(true);
368+
369+
s3.deleteObjects(multiObjectDeleteRequest);
370+
371+
System.out.println(java.time.Clock.systemUTC().instant() + " delete Objects");
372+
} catch (AmazonServiceException e) {
373+
System.exit(1);
374+
}
375+
}
376+
345377
public void deleteBucket(String bucket) {
346378
try {
347379
s3.deleteBucket(bucket);

0 commit comments

Comments
 (0)