2016-03-01 4 views
1

Я пытаюсь удалить несколько объектов, но это не удалит. Я не получаю никаких исключений. Если я уйду для одного удаления, нет проблем с ним.Aws multiple object delete

После кода я использую

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); 
    } 

Моя служба

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()); 
     } 
    } 

Мой магазин данных в ведре выглядит

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

Я использовал ниже код для удаления одного объекта (рабочий штраф)

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()); 
     } 

Пожалуйста, помогите мне, что мне не хватает здесь в нескольких объектах delete?

Заранее спасибо

+0

Вы пробовали сравнивая код с образцами АМС на http://docs.aws.amazon.com/AmazonS3/latest/dev/DeletingMultipleObjectsUsingJava.html? – jbird

ответ

1

Это не является допустимым именем Ковша:

mubucketname/dev/3123 

Названия ведра отдельно от ключа, и вы не можете поместить путь префиксов из ключа на имени ведра. Попробуйте это:

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); 
+0

Благодарим за быстрый ответ, пожалуйста, обновите свой ответ, нет необходимости давать косую черту при приеме ключа, это будет просто выглядеть («dev/3123/*. Jpg»). Если я даю слэш здесь, он не работает. –

+0

К сожалению, спасибо. Исправлена. – ataylor