Prabjot Singh
Prabjot Singh

Reputation: 4767

Aws multiple object delete

I am trying to delete multiple objects,but it is not going to delete. I am not getting any exception.If i go for single delete,there is no issue with it.

Following code i am using

public void deleteImage(){
        List<KeyVersion> amazonKeys = new ArrayList<KeyVersion>();
        amazonKeys.add(new KeyVersion("compressedc1eac77b-9c38-4036-9770-34a77a163bb0.jpeg"));
        amazonKeys.add(new KeyVersion("compressedb52adf1e-5155-48b6-9051-bb679601f5ee.jpeg"));
        imageService.removeS3Files("mubucketname/dev/3123",amazonKeys);
    }

My service is

public void removeS3Files(String bucketName,List<KeyVersion> keys){

        log.debug("deleting multiple objects from s3 with bucket::" + bucketName);
        try{
            DeleteObjectsRequest multiObjectDeleteRequest = new DeleteObjectsRequest(bucketName);
            multiObjectDeleteRequest.setKeys(keys);
            AmazonS3 s3client = new AmazonS3Client(CustomAwsCredentials.getInstance(envConfiguration));
            s3client.setEndpoint(Constant.AWS_ENDPOINT);
            DeleteObjectsResult deleteObjectsResult = s3client.deleteObjects(multiObjectDeleteRequest);
            System.out.println(deleteObjectsResult.getDeletedObjects());
        }catch(AmazonServiceException exception){
            log.debug("Caught an AmazonServiceException.");
            log.debug("Error Message:    " + exception.getMessage());
        }catch (AmazonClientException clientException) {
            log.debug("Caught an AmazonClientException.");
            log.debug("Error Message:    " + clientException.getMessage());
        }
    }

My data store in bucket looks like

bucketname/dev/3123/compressedc1eac77b-9c38-4036-9770-34a77a163bb0.jpeg
bucketname/dev/3123/compressedb52adf1e-5155-48b6-9051-bb679601f5ee.jpeg

I have used below code for delete single object(working fine)

try{
            AmazonS3 s3client = new AmazonS3Client(CustomAwsCredentials.getInstance(envConfiguration));
            System.out.println(s3client.doesBucketExist(bucketName));
            s3client.setEndpoint(Constant.AWS_ENDPOINT);
            s3client.deleteObject(bucketName, key);
        }catch(AmazonServiceException exception){
            log.debug("Caught an AmazonServiceException.");
            log.debug("Error Message:    " + exception.getMessage());
        }catch (AmazonClientException clientException) {
            log.debug("Caught an AmazonClientException.");
            log.debug("Error Message:    " + clientException.getMessage());
        }

Please help me what i am missing here in multiple object delete ?

Thanks in advance

Upvotes: 1

Views: 2603

Answers (1)

ataylor
ataylor

Reputation: 66099

This is not a valid bucket name:

mubucketname/dev/3123

The bucket name is separate from the key and you can't put path prefixes from the key on the bucket name. Try this:

List<KeyVersion> keys = new ArrayList<KeyVersion>();
keys.add(new KeyVersion("dev/3123/compressedc1eac77b-9c38-4036-9770-34a77a163bb0.jpeg"));
keys.add(new KeyVersion("dev/3123/compressedb52adf1e-5155-48b6-9051-bb679601f5ee.jpeg"));
DeleteObjectsRequest request = new DeleteObjectsRequest("mubucketname").withKeys(keys);
DeleteObjectsResult result = s3client.deleteObjects(request);

Upvotes: 3

Related Questions