[英]using deleteObjects in java for deleting files from aws s3 , getting successfully delete but files are not getting deleted
我使用下面的代碼從 s3 中刪除多個文件
AWSCredentials credentials = new BasicAWSCredentials(key, S3secretKey);
AmazonS3 s3client = new AmazonS3Client(credentials);
String[] fileNames = files.split(",");
if(fileNames.length==1)
s3client.deleteObject(bucketName+path, files);
else{
List<KeyVersion> keys = new ArrayList<KeyVersion>();
for(int i =0 ; i< fileNames.length ; i++){
keys.add(new KeyVersion(fileNames[i]));
}
DeleteObjectsRequest multiObjectDeleteRequest = new DeleteObjectsRequest(bucketName+path);
multiObjectDeleteRequest.setKeys(keys);
DeleteObjectsResult delObjRes = s3client.deleteObjects(multiObjectDeleteRequest);
System.out.format("Successfully deleted all the %s items.\n", delObjRes.getDeletedObjects().size());
}
顯示已成功刪除但文件未從 s3 中刪除
對於單個文件代碼s3client.deleteObject(bucketName, file);
工作正常。
您可以嘗試以下方法,即使是截斷的頁面,它也會處理刪除,並且它將遞歸刪除給定目錄中的所有內容:
public Set<String> listS3DirFiles(String bucket, String dirPrefix) {
ListObjectsV2Request s3FileReq = new ListObjectsV2Request()
.withBucketName(bucket)
.withPrefix(dirPrefix)
.withDelimiter("/");
Set<String> filesList = new HashSet<>();
ListObjectsV2Result objectsListing;
try {
do {
objectsListing = amazonS3.listObjectsV2(s3FileReq);
objectsListing.getCommonPrefixes().forEach(folderPrefix -> {
filesList.add(folderPrefix);
Set<String> tempPrefix = listS3DirFiles(bucket, folderPrefix);
filesList.addAll(tempPrefix);
});
for (S3ObjectSummary summary: objectsListing.getObjectSummaries()) {
filesList.add(summary.getKey());
}
s3FileReq.setContinuationToken(objectsListing.getNextContinuationToken());
} while(objectsListing.isTruncated());
} catch (SdkClientException e) {
System.out.println(e.getMessage());
throw e;
}
return filesList;
}
public boolean deleteDirectoryContents(String bucket, String directoryPrefix) {
Set<String> keysSet = listS3DirFiles(bucket, directoryPrefix);
if (keysSet.isEmpty()) {
System.out.println("Given directory {} doesn't have any file "+ directoryPrefix);
return false;
}
DeleteObjectsRequest deleteObjectsRequest = new DeleteObjectsRequest(bucket)
.withKeys(keysSet.toArray(new String[0]));
try {
amazonS3.deleteObjects(deleteObjectsRequest);
} catch (SdkClientException e) {
System.out.println(e.getMessage());
throw e;
}
return true;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.