GEDOPLAN
QuarkusCloud ComputingJakarta EE (Java EE)

Quarkus S3 Client

QuarkusCloud ComputingJakarta EE (Java EE)
mariya m basket 7850546 1280

Vor fast genau 20 Jahren, am 14. März 2006 startete Amazon seinen S3-Service. Ein guter Grund um sich einmal die Anbindung an S3 aus einer Quarkus-Anwendung heraus anzuschauen.

Im Simple Storage Service (S3) können Objekte in sogenannten Buckets abgelegt werden. Ein Bucket entspricht dabei einem Dateisystem auf einem lokalen Rechner. Die Objekte haben eine eindeutige ID und enthalten Metadaten wie Größe, Content Type etc.

Für den Zugriff steht im Quarkiverse einen Extension bereit. Den Client kann man entweder blockierend als auch nicht blockierend (asynchron) nutzen. Wie in Quarkus üblich können die Clients mit einem @Inject in die Anwendung einbebunden werden.

@Inject
S3Client s3Client;

@Inject
S3AsyncClient s3AsyncClient;

Wir werden uns in diesem Blog-Beitrag die synchrone Variante anschauen. Damit man auch unabhängig von einem AWS S3 Zugang entwickeln kann, steht mit dem LocalStack ein Dev Service zur Verfügung, der sehr viele AWS Dienste lokal bereitstellt. Zur Nutzung dieses LocalStacks ist keine Konfiguration notwendig, er wird beim Aufruf des Dev Mode automatisch als Docker-Container gestartet.

Die Kommunikation zwischen dem S3-Client und dem AWS Service erfolgt über Request-Objekte. Um eine Liste mit allen Einträgen aus einem Bucket abzurufen kann folgender Request benutzt werden.

var listRequest = ListObjectsRequest.builder()
    .bucket("bucketName")
    .build();

Anschließend kann dieser an den S3-Client übergeben werden. Und die Ergebnisse über das ListObjectsResponse abgerufen werden.

s3Client.listObjects(listRequest)
    .contents()
    .stream()
    .forEach(s3Object -> ...);

Um eine Datei in ein Bucket hochzuladen benutzt man einen PutObjectRequest. Dieser enthält die zugehörigen Metadaten der Datei. Das Byte-Array mit den Daten wird gemeinsam mit dem PutObjectRequest an den S3-Client übergeben.

var putRequest = PutObjectRequest.builder()
    .bucket("bucketName")
    .key("fileName")
    .contentType("application/pdf")
    .build();
s3Client.putObject(putRequest, new byte[0]);

Weitere Zugriffe auf den S3 Service können nach dem gleichen Muster erfolgen. Insgesamt ist die Nutzung des S3 Service im wahrsten Sinne des Wortes sehr simpel. Insgesamt können damit sehr einfach Objekte in der Cloud abgelegt werden ohne zusätzlichen Speicher auf dem Server zu belegen.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Bitte füllen Sie dieses Feld aus.
Bitte füllen Sie dieses Feld aus.
Bitte gib eine gültige E-Mail-Adresse ein.
Sie müssen den Bedingungen zustimmen, um fortzufahren.

Autor

Diesen Artikel teilen

LinkedIn
Xing

Gibt es noch Fragen?

Fragen beantworten wir sehr gerne! Schreibe uns einfach per Kontaktformular.

Kurse

weitere Blogbeiträge

IT-Training - GEDOPLAN
Webprogrammierung

Angular 2 Animationen

Angular 2 hat seinen Beta-Status verlassen und liegt in einer finalen Version vor. Fester Bestandsteil der Version ist die deklarative…

Work Life Balance. Jobs bei Gedoplan

We are looking for you!

Lust bei GEDOPLAN mitzuarbeiten? Wir suchen immer Verstärkung – egal ob Entwickler, Dozent, Trainerberater oder für unser IT-Marketing! Schau doch einfach mal auf unsere Jobseiten! Wir freuen uns auf Dich!

Work Life Balance. Jobs bei Gedoplan

We are looking for you!

Lust bei GEDOPLAN mitzuarbeiten? Wir suchen immer Verstärkung – egal ob Entwickler, Dozent, Trainerberater oder für unser IT-Marketing! Schau doch einfach mal auf unsere Jobseiten! Wir freuen uns auf Dich!