Code zum Löschen aller Dateien mit dem angegebenen Präfix in AWS S3 (Java)

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

Code

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

Nachtrag

** Amazon S3 Client ** ist veraltet Scheint die Verwendung von AmazonS3ClientBuilder zu empfehlen Dieser Artikel war hilfreich.

Recommended Posts

Code zum Löschen aller Dateien mit dem angegebenen Präfix in AWS S3 (Java)
[Java-Tool] Ein Tool, das Dateien unter dem angegebenen Pfad nach Erweiterung löscht
Importieren Sie Dateien derselben Hierarchie in Java
Errate den Zeichencode in Java
Löschen von AWS S3-Objekten in Java
Umbenannte Ordner in AWS S3 (Java)
Untersuchen Sie die Systeminformationen der AWS Lambda-Betriebsumgebung in Java
Untersuchen Sie die Liste der in AWS Lambda + Java verfügbaren Schriftarten
Beispielcode mit JMustache, der Moustache-Vorlagen-Engine in Java
Holen Sie sich das Ergebnis von POST in Java
Holen Sie sich eine Liste der S3-Dateien mit ListObjectsV2Request (AWS SDK für Java)
Dies und das der Implementierung der zeitlichen Beurteilung von Daten in Java
Beispielprogramm, das den Hashwert einer Datei in Java zurückgibt
Alle gleichen Hash-Code-Zeichenfolgen in Java
Die Geschichte des Schreibens von Java in Emacs
[Java] Wo befindet sich die Implementierungsklasse der Annotation, die in BeanValidation vorhanden ist?
Überprüfen Sie das ID-Token eines von AWS Cognito in Java authentifizierten Benutzers
Beispielcode zum Abrufen der wichtigsten SQL-Typwerte in Java + MySQL 8.0
Die Geschichte des einfachen String-Vergleichs in Java
[Java] Behandlung von Java Beans in der Methodenkette
Die Geschichte eines gewöhnlichen Othello in Java
Über die Idee anonymer Klassen in Java
[Java] Zugriff auf die signierte URL von s3 (signierte Version 2)
Die Geschichte des Lernens von Java in der ersten Programmierung
Spüren Sie den Lauf der Zeit auch in Java
Erster Touch der Files-Klasse (oder Java 8)
Ich habe einen Testcode (Junit & mockit) für den Code geschrieben, der die AWS-API (Java) aufruft.
Rufen Sie die URL des HTTP-Umleitungsziels in Java ab
[Java] Holen Sie sich die Datei unabhängig von der Umgebung in das JAR
Ändern Sie die Speicherqualität von JPEG-Bildern in Java
Code, der nur die in der Verarbeitung integrierte Kamera anzeigt
Unterschiede im Code bei Verwendung des Längensystems in Java
Fassen Sie die zusätzlichen Elemente der optionalen Klasse in Java 9 zusammen
Die Geschichte, dass .java auch in Unity 2018 erstellt wurde
Ein Programm (Java), das die Summe von ungeraden und geraden Zahlen in einem Array ausgibt
Rufen Sie Java im Zentrum von Technologiethemen und Elementartechnologien, die Java-Ingenieure 2017 verfolgen sollten.
Beispielcode zum Abrufen der Werte der wichtigsten SQL-Typen in Java + Oracle Database 12c
Erstellen Sie eine Datenbank aller Bücher, die im letzten Jahrhundert in Japan im Umlauf waren
[Java] Es scheint, dass Sie nicht "0 <hoge <10" in den bedingten Ausdruck der "if" -Anweisung schreiben können.
Wurde im Basisjahr der Java-Kalenderwoche durchgeführt
Eine kurze Erklärung der fünf Arten von Java Static
Erhältlich am nächsten Werktag nach dem angegebenen Datum bei JAVA
Das Problem, dass alle Daten in der Tabelle angezeigt wurden, wurde behoben
[Java] [Java EE] [Glassfish] (Fortsetzung) Stil, der den Cache von Glassfish bezweifelt
Zählen Sie die Anzahl der Stellen nach dem Dezimalpunkt in Java
Dinge, die Sie beim Schreiben von Code in Java beachten sollten
Korrigieren Sie den Zeichencode in Java und lesen Sie von der URL
Ein Programm, das die Anzahl der Wörter in einer Liste zählt
So leiten Sie den letzten Tag des Monats in Java ab
[AWS / S3] Wie lädt man schließlich mehrere Dateien hoch?
[Java] Löschen Sie die angegebene Anzahl von Zeichen am Ende von StringBuilder
Statische Funktion, um zu überprüfen, ob der RGB-Fehler von BufferdImage innerhalb des angegebenen Verhältnisses in Java liegt
Implementieren wir die Bedingung, dass der Umfang und das Innere der Ougi-Form in Java enthalten sind [Teil 2]
Implementieren wir die Bedingung, dass der Umfang und das Innere der Ougi-Form in Java enthalten sind [Teil 1]
Wenn Sie shutdownNow nicht aufrufen, wenn die Übertragung mit dem Java SDK von AWS S3 abgeschlossen ist, bleibt der Thread weiterhin bestehen.