Arbeit mit S3 und Cloud-Speichern in Java: Die AWS SDK-Bibliothek

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

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(" - "

Empfehlungen