Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to delete multiple objects in an Amazon S3 bucket using Java V2

So I want to delete all the objects that could be inside a folder in s3 (basically with a certain prefix).
How do I do that? I am currently using this while (true) loop, but I am told it is not a good approach to use while (true).
This is what I am using right now.

while (true) {
    for (S3ObjectSummary objectSummary: objectListing.getObjectSummaries()) {
        this.s3Client.deleteObject(bucketName, objectSummary.getKey());
    }

    if (objectListing.isTruncated()) {
        objectListing = s3Client.listNextBatchOfObjects(objectListing);
    } else {
        break;
    }
}
like image 595
Inderjeet Chawla Avatar asked Sep 14 '26 13:09

Inderjeet Chawla


1 Answers

When using the AWS SDK for Java V2 S3 Client, you can set up your code to use a List of ObjectIdentifier objects to delete. Add a new entry to the List for each object to delete. Specify the path where the object is located in the ObjectIdentifier key value. This is where you specify the path in a bucket where the object is located.

You need to populate the LIST with the number of objects that you want to delete. So if you have 20 objects - then you need to add 20 entries to the List each with a valid key value that references the object to delete.

Then call deleteObjects(). This is a cleaner way to delete many objects. That is, you can delete multiple objects in 1 call vs many calls.

See this code.

 public static void deleteBucketObjects(S3Client s3, String bucketName, String objectName) {

        ArrayList<ObjectIdentifier> toDelete = new ArrayList<>();
        toDelete.add(ObjectIdentifier.builder()
            .key(objectName)
            .build());

        try {
            DeleteObjectsRequest dor = DeleteObjectsRequest.builder()
                .bucket(bucketName)
                .delete(Delete.builder()
                .objects(toDelete).build())
                .build();
            
            s3.deleteObjects(dor);

        } catch (S3Exception e) {
            System.err.println(e.awsErrorDetails().errorMessage());
            System.exit(1);
        }
        
        System.out.println("Done!");
    }
like image 175
smac2020 Avatar answered Sep 17 '26 04:09

smac2020



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!