Travailler avec S3 et les stockages cloud en Java à l'aide d'AWS SDK
Les stockages objets cloud via le protocole S3 (Amazon Simple Storage Service) sont devenus la norme de facto pour le stockage de données non structurées. En Java, pour travailler avec des stockages compatibles S3 (Amazon S3, MinIO, Yandex Object Storage, DigitalOcean Spaces, etc.), on utilise la bibliothèque officielle AWS SDK for Java. Dans cet article, nous aborderons la connexion, l'initialisation du client et les opérations de base avec les fichiers.
Connexion d'AWS SDK
Pour travailler avec S3, ajoutez la dépendance dans pom.xml (Maven) :
<dependency> <groupId>software.amazon.awssdk</groupId> <artifactId>s3</artifactId> <version>2.27.0</version></dependency>Pour Gradle :
implementation 'software.amazon.awssdk:s3:2.27.0'Création d'un client S3
Le client se configure via un builder. Pour Amazon S3, il suffit de spécifier la région :
S3Client s3 = S3Client.builder() .region(Region.EU_CENTRAL_1) .build();Pour les stockages compatibles (MinIO, Yandex Object Storage), il faut spécifier l'endpoint et les credentials :
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) // la région peut être quelconque .credentialsProvider(StaticCredentialsProvider.create( AwsBasicCredentials.create(accessKey, secretKey))) .build();Opérations de base avec les buckets
- Création d'un bucket
- Vérification de l'existence
- Suppression d'un bucket
Exemple de création d'un bucket :
String bucketName = "my-java-bucket";try { s3.createBucket(CreateBucketRequest.builder() .bucket(bucketName) .build()); System.out.println("Bucket créé : " + bucketName);} catch (S3Exception e) { System.err.println("Erreur : " + e.awsErrorDetails().errorMessage());}Téléchargement de fichiers (Upload)
On peut télécharger un fichier depuis un flux, une chaîne ou un fichier local :
// Téléchargement depuis un fichier locals3.putObject(PutObjectRequest.builder() .bucket(bucketName) .key("docs/report.pdf") .build(), RequestBody.fromFile(Paths.get("/home/user/report.pdf")));
// Téléchargement d'une chaîne comme fichier textes3.putObject(PutObjectRequest.builder() .bucket(bucketName) .key("hello.txt") .contentType("text/plain") .build(), RequestBody.fromString("Bonjour, S3 !"));Téléchargement de fichiers (Download)
Pour obtenir un objet, utilisez getObject :
// Téléchargement vers un fichiers3.getObject(GetObjectRequest.builder() .bucket(bucketName) .key("docs/report.pdf") .build(), ResponseTransformer.toFile(Paths.get("downloaded_report.pdf")));
// Téléchargement vers une chaîneString content = s3.getObjectAsBytes(GetObjectRequest.builder() .bucket(bucketName) .key("hello.txt") .build()) .asUtf8String();System.out.println(content);Suppression d'objets
s3.deleteObject(DeleteObjectRequest.builder() .bucket(bucketName) .key("hello.txt") .build());System.out.println("Fichier supprimé");Liste des objets dans un bucket
Pour obtenir la liste de tous les fichiers (avec pagination) :
ListObjectsV2Request listReq = ListObjectsV2Request.builder() .bucket(bucketName) .maxKeys(100) .build();
ListObjectsV2Response listRes = s3.listObjectsV2(listReq);for (S3Object obj : listRes.contents()) { System.out.println(" - " Aussi dans la bibliothèque
Configuration des applications PHP : bibliothèques et outils pour un paramétrage flexible
fx pour Go : guide complet avec exemples
Bibliothèque WebSocket Kotlin : Ktor WebSocket Client et Server
CocoaPods Swift : guide complet avec exemples
Migrations de bases de données en C++ : aperçu des outils et bibliothèques