Annexe F - Fichiers sur AWS
AWS propose un SDK pour permettre l'interaction avec les différents services qu'ils proposent à partir d'une application Java.
Le SDK peut être ajouté dans son entièreté comme dépendance, mais il est relativement "pesant". On peut donc importer seulement les parties qui sont nécessaires à l'application. Pour la manipulation des fichiers dans les ressources S3, on aura besoin d'ajouter 2 dpendances.
<dependency>
<groupId>software.amazon.awssdk</groupId>
<artifactId>s3</artifactId>
<version>2.39.2</version>
</dependency>
<dependency>
<groupId>software.amazon.awssdk</groupId>
<artifactId>auth</artifactId>
<version>2.39.2</version>
</dependency>
Créer un client S3
Instance S3
À partir de ce point, j'assume que vous avez déjà un Bucket S3 de créé et configuré sur AWS. Les instructions de connexion sont données pour le contexte de l'atelier pour étudiant. Dans un contexte réel il sera possible de générer des utilisateurs IAM pour se connecter au stockage S3.
Pour interagir avec un Bucket S3 il faudra créer le client dans l'application. Dans le cadre de l'atelier pour étudiant, nous créerons cette connexion avec les identifiants de session. Ces informations sont disponibles sur la page où vous lancez l'atelier.
- À droite vous trouverez un lien d'information
AWS Details - Une fois ouvert, vliquer sur
Showpour exposer les informations.

Dans le service qui s'occupe des opérations de lecture et écriture, on crée le client pour interagir avec le stockage.
String awsAccessKey = "";
String awsSecretAccessKey = "";
String awsSessionToken = "";
String bucket = "nom-du-bucket";
AwsSessionCredentials credentials = AwsSessionCredentials.create(awsAccessKey, awsSecretAccessKey, awsSessionToken);
S3Client s3Client = S3Client.builder()
.credentialsProvider(StaticCredentialsProvider.create(credentials))
.region(Region.US_EAST_1)
.build();
La valeur des variables awsAccessKey, awsSecretAccessKey et awsSessionToken sont toutes récupérées des informations de la session.
Propriétés de configuration
Pour une meilleure gestion des informations de la session AWS, vous pouvez extraire ces informations dans des propriétés de configuration. Voir la gestion des clés de chiffrement pour les JWT comme exemple.
Effectuer des actions vers un Bucket S3
Client synchrone
Notez que pour ces exemples j'utilise un client synchrone, mais il existe également un client asynchrone pour interagir avec les services S3. Si votre application doit gérer des fichiers volumineux, considérez les méthodes asynchrones.
Téléverser un fichier
public FileMetaData uploadToS3(MultipartFile file) throws IOException {
try {
validateFile(file);
} catch (IOException e) {
throw new RuntimeException(e);
}
String key;
try(InputStream inputStream = file.getInputStream()) {
key = service.uploadFileToBucket(inputStream, file.getSize());
}
FileMetaData fileMetaData = FileMetaData
.builder()
.nomOriginal(file.getOriginalFilename())
.nomStocke(key)
.build();
return repository.save(fileMetaData);
}
- Notez que comme pour la gestion de fichiers en local, je valide le fichier avant le téléverser.
- Dans un Bucket S3, l'attribut
keyreprésente le chemin d'accès vers le fichier. - Pour organiser les fichiers en dossiers et sous dossiers on peut utiliser un nom de clé avec des
/String key = "dossier/" + UUID.randomUUID().toString();