2016-03-01 69 views
1

我想刪除多個對象,但它不會刪除。我沒有得到任何異常。如果我去單刪除,它沒有問題。Aws多個對象刪除

下面的代碼我使用

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

請幫我一下我在這裏多個對象刪除嗎?

在此先感謝

+0

您是否嘗試過您的代碼在http://docs.aws.amazon.com/AmazonS3/latest/dev/DeletingMultipleObjectsUsingJava.html相較於AWS樣? – 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