J'avais une telle exigence dans mon travail, alors je l'ai mise en œuvre.
C'était inattendu de penser que je pouvais écrire en une ou deux lignes ... La bibliothèque utilise Guava et lombok. (Malheureusement, mon lieu de travail est Java 7) Je pense qu'il existe un meilleur moyen, mais cela a fonctionné pour le moment, alors prenez note
S3ObjectDelete.java
@RequiredArgsConstructor
public class S3ObjectDelete {
private AmazonS3Client client = new AmazonS3Client();
private final String bucket;
public static void main(String[] args) {
val hoge = new S3ObjectDelete("Nom du godet");
hoge.delete("Préfixe");
}
public void delete(String prefix) {
//Il semble que le nombre maximum d'éléments pouvant être supprimés en même temps soit de 1000, donc divisez et traitez
for (val keys : Lists.partition(keys(prefix), 1000)) {
String[] array = keys.toArray(new String[keys.size()]);
client.deleteObjects(new DeleteObjectsRequest(bucket).withKeys(array));
}
}
List<String> keys(String prefix) {
ObjectListing objects = client.listObjects(bucket, prefix);
val f = new S3Object2StringKey();
List<String> keys = new ArrayList<>(Lists.transform(objects.getObjectSummaries(), f));
//Il semble que le nombre par défaut d'objets pouvant être acquis en même temps soit de 1000, alors bouclez et acquérez tous
while (objects.isTruncated()) {
objects = client.listNextBatchOfObjects(objects);
keys.addAll(Lists.transform(objects.getObjectSummaries(), f));
}
return keys;
}
}
public static class S3Object2StringKey implements Function<S3ObjectSummary, String> {
@Override
public String apply(S3ObjectSummary input) {
return input.getKey();
}
}
** Le client Amazon S3 ** est obsolète Semble recommander l'utilisation d'AmazonS3ClientBuilder Cet article a été utile.