Ich hatte eine solche Anforderung in meiner Arbeit, also habe ich sie umgesetzt.
Es war unerwartet mühsam zu glauben, ich könnte in ein oder zwei Zeilen schreiben ... Die Bibliothek verwendet Guave und Lombok. (Leider ist mein Arbeitsplatz Java 7) Ich denke, es gibt einen besseren Weg, aber es hat vorerst funktioniert, machen Sie sich also eine Notiz
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("Eimername");
hoge.delete("Präfix");
}
public void delete(String prefix) {
//Es scheint, dass die maximale Anzahl von Elementen, die gleichzeitig gelöscht werden können, 1000 beträgt. Teilen und verarbeiten Sie sie also
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));
//Es scheint, dass die Standardanzahl von Elementen, die gleichzeitig erfasst werden können, 1000 beträgt
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();
}
}
** Amazon S3 Client ** ist veraltet Scheint die Verwendung von AmazonS3ClientBuilder zu empfehlen Dieser Artikel war hilfreich.
Recommended Posts