以前接受的答案非常有用,尽管它不是100%完整。我用它来写下面的方法。它基本上可以工作,尽管我还没有测试过它的错误处理能力。
-
String
传入键,这些键被转换为
ObjectIdentifier
deleteObjects
要求。
-
s3Client
log
假定已在其他位置初始化。如果您不需要日志记录,请随意删除它。
-
该方法当前返回成功删除的次数。
public int deleteS3Objects(String bucketName, String[] keys) {
List<ObjectIdentifier> objIds = Arrays.stream(keys)
.map(key -> ObjectIdentifier.builder().key(key).build())
.collect(Collectors.toList());
try {
DeleteObjectsRequest dor = DeleteObjectsRequest.builder()
.bucket(bucketName)
.delete(Delete.builder().objects(objIds).build())
.build();
DeleteObjectsResponse delResp = s3client.deleteObjects(dor);
if (delResp.errors().size() > 0) {
String err = String.format("%d errors returned while deleting %d objects",
delResp.errors().size(), objIds.size());
log.warn(err);
}
if (delResp.deleted().size() < objIds.size()) {
String err = String.format("%d of %d objects deleted",
delResp.deleted().size(), objIds.size());
log.warn(err);
}
return delResp.deleted().size();
}
catch(AwsServiceException e) {
// The call was transmitted successfully, but Amazon S3 couldn't process
// it, so it returned an error response.
log.error("Error received from S3 while attempting to delete objects", e);
}
catch(SdkClientException e) {
// Amazon S3 couldn't be contacted for a response, or the client
// couldn't parse the response from Amazon S3.
log.error("Exception occurred while attempting to delete objects from S3", e);
}
return 0;
}
删除对象
Delete.Builder
和
目标识别器
钥匙但是
getObject
和
putObject
接受字符串键。为什么不呢
DeleteObjectsRequest.Builder
keys()
方法?他们还没有正式表示SDK已经可以生产了,所以其中一些可能会发生变化。)