Arbeit mit S3 und Cloud-Speichern in Java mit dem AWS SDK
Cloud-Objektspeicher über das S3-Protokoll (Amazon Simple Storage Service) sind zum De-facto-Standard für die Speicherung unstrukturierter Daten geworden. In Java wird für die Arbeit mit S3-kompatiblen Speichern (Amazon S3, MinIO, Yandex Object Storage, DigitalOcean Spaces usw.) die offizielle Bibliothek AWS SDK for Java verwendet. In diesem Artikel behandeln wir die Einbindung, Initialisierung des Clients und grundlegende Dateioperationen.
Einbindung des AWS SDK
Fügen Sie für die Arbeit mit S3 die folgende Abhängigkeit in Ihre pom.xml (Maven) ein:
<dependency> <groupId>software.amazon.awssdk</groupId> <artifactId>s3</artifactId> <version>2.27.0</version></dependency>Für Gradle:
implementation 'software.amazon.awssdk:s3:2.27.0'Erstellen eines S3-Clients
Der Client wird über einen Builder konfiguriert. Für Amazon S3 reicht die Angabe der Region:
S3Client s3 = S3Client.builder() .region(Region.EU_CENTRAL_1) .build();Für kompatible Speicher (MinIO, Yandex Object Storage) müssen Endpunkt und Anmeldedaten angegeben werden:
String endpoint = "https://storage.yandexcloud.net";String accessKey = "YOUR_ACCESS_KEY";String secretKey = "YOUR_SECRET_KEY";
S3Client s3 = S3Client.builder() .endpointOverride(URI.create(endpoint)) .region(Region.US_EAST_1) // Region kann beliebig sein .credentialsProvider(StaticCredentialsProvider.create( AwsBasicCredentials.create(accessKey, secretKey))) .build();Grundlegende Operationen mit Buckets
- Bucket erstellen
- Existenz prüfen
- Bucket löschen
Beispiel zum Erstellen eines Buckets:
String bucketName = "my-java-bucket";try { s3.createBucket(CreateBucketRequest.builder() .bucket(bucketName) .build()); System.out.println("Bucket erstellt: " + bucketName);} catch (S3Exception e) { System.err.println("Fehler: " + e.awsErrorDetails().errorMessage());}Dateien hochladen (Upload)
Eine Datei kann aus einem Stream, einem String oder einer lokalen Datei hochgeladen werden:
// Hochladen aus einer lokalen Dateis3.putObject(PutObjectRequest.builder() .bucket(bucketName) .key("docs/report.pdf") .build(), RequestBody.fromFile(Paths.get("/home/user/report.pdf")));
// Hochladen eines Strings als Textdateis3.putObject(PutObjectRequest.builder() .bucket(bucketName) .key("hello.txt") .contentType("text/plain") .build(), RequestBody.fromString("Hello, S3!"));Dateien herunterladen (Download)
Verwenden Sie getObject, um ein Objekt abzurufen:
// Herunterladen in eine Dateis3.getObject(GetObjectRequest.builder() .bucket(bucketName) .key("docs/report.pdf") .build(), ResponseTransformer.toFile(Paths.get("downloaded_report.pdf")));
// Herunterladen als StringString content = s3.getObjectAsBytes(GetObjectRequest.builder() .bucket(bucketName) .key("hello.txt") .build()) .asUtf8String();System.out.println(content);Objekte löschen
s3.deleteObject(DeleteObjectRequest.builder() .bucket(bucketName) .key("hello.txt") .build());System.out.println("Datei gelöscht");Objekte im Bucket auflisten
Um eine Liste aller Dateien (mit seitenweiser Ausgabe) zu erhalten:
ListObjectsV2Request listReq = ListObjectsV2Request.builder() .bucket(bucketName) .maxKeys(100) .build();
ListObjectsV2Response listRes = s3.listObjectsV2(listReq);for (S3Object obj : listRes.contents()) { System.out.println(" - " Auch in der Bibliothek
deepkit/type für TypeScript: Komplettguide mit Beispielen
Arbeiten mit Excel in Swift auf iOS und macOS: Bibliotheken und Beispiele
Dependency Injection Container für Kotlin: Koin vs Kodein vs Dagger