0% ont trouvé ce document utile (0 vote)
371 vues17 pages

Intégration MinIO Dans Java Spring Boot

Ce document décrit la configuration d'un client MinIO en utilisant Java Spring Boot. Il présente les étapes de configuration de la dépendance, des variables et du client MinIO. Il montre également comment effectuer le téléchargement et la récupération de fichiers vers et depuis MinIO.

Transféré par

Gnadjue Samuel
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
371 vues17 pages

Intégration MinIO Dans Java Spring Boot

Ce document décrit la configuration d'un client MinIO en utilisant Java Spring Boot. Il présente les étapes de configuration de la dépendance, des variables et du client MinIO. Il montre également comment effectuer le téléchargement et la récupération de fichiers vers et depuis MinIO.

Transféré par

Gnadjue Samuel
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Configuration MinIO

en utilisant Java
Spring Boot

Par Youssoufou & Abdul


PLAN DE PRÉSENTATION
1. Qu’est-ce que c’est MinIO ?

2. Configurer la dépendance requise et définir les


valeurs des variables dans le fichier
[Link].

3. Configuration du client MinIO en utilisant Java

4. Présentation de l’interface client MinIO


et de quelques actions possibles sur les dossiers et fichiers
5. Sauvegarde de fichier sur MinIO

6. Récupération de fichier depuis MinIO


Qu’est-ce que c’est MinIO
MinIO est un serveur de stockage d'objets open source
conçu pour stocker de vastes quantités de données non
structurées, y compris des fichiers, des images, des vidéos et
d'autres types de données binaires. Il offre une compatibilité
avec l'API S3 (Amazon Simple Storage Service) et permet de
gérer électroniquement des documents (GED), ce qui en fait
une solution populaire pour le stockage d'objets dans le
cloud et sur site, ainsi que pour la gestion électronique de
documents au sein d'une organisation.
Configuration de la dépendance requise et
définition des valeurs des variables
([Link])
Pour commencer, nous allons intégrer la dépendance MinIO
dans le gestionnaire de dépendances de notre projet Java,
que ce soit à travers le fichier Gradle ou le fichier [Link]
(dans le cas de Maven). En procédant ainsi, nous prendrons
soin d'exclure la dépendance de OkHttp pour éviter tout
conflit avec la version utilisée dans notre application,
garantissant ainsi une intégration harmonieuse de MinIO.

<dependency>
<groupId>[Link]</groupId>
<artifactId>minio</artifactId>
<version>8.5.2</version>
<exclusions>
<exclusion>
<artifactId>okhttp</artifactId>
<groupId>[Link].okhttp3</groupId>
</exclusion>
</exclusions>
</dependency>
Nous allons maintenant définir les valeurs des variables
dans le fichier [Link] qui seront utilisées lors
de la configuration du client MinIO.

# Minio Properties

- [Link]: [Link]
- [Link]: my-class-bucket
- [Link]-key: admin
- [Link]-key: dfhjbgdjghGQ

url : url de la ressource

bucket : dossier principal qui héberge les


fichiers qui seront stockées

access-key : clé de connexion du client

secret-key : pass de connexion du client


NB : L'administrateur système configurera le serveur MinIO et fournira l'URL de la ressource.
Pour obtenir l'access-key et le secret-key, vous devrez les rechercher dans la barre latérale de
l'interface, spécifiquement dans le menu "Access Keys".

Menu Access Keys


Configuration du client MinIO avec
Java
Nous allons créer une classe de configuration qui lira les
valeurs des variables dans le fichier [Link] et
exposera des beans qui seront utilisés lors du démarrage de
notre application Spring Boot.
@Component
public class MinioClientConfig {
@Autowired
private ParamsUtils paramsUtils;

@Bean
public MinioClient getMinioClientVIP() {
[Link]([Link]("addresse VIP minio:: %s",
[Link]()));
return MinioClient
.builder()
.endpoint([Link]())
.credentials([Link](),
[Link]())
.build();
}

@Bean
public MinioClient getMinioClientCurrentServer() throws
UnknownHostException {
String localhost = "[Link]
[Link]([Link]("addresse local minio:: %s", localhost));
return MinioClient
.builder()
.endpoint(localhost)
.credentials([Link](),
[Link]())
.build();
}
}
Présentation de l’interface client
MinIO
et de quelques opérations possibles
sur les dossiers et fichiers
Nous allons présenter l'interface utilisateur de la page
d'accueil, mettant en évidence un répertoire (bucket) spécifique
dédié au projet 'myFacture', ainsi que les objets contenus dans
ses sous-dossiers. Ensuite, nous explorerons un ensemble
d'opérations possibles sur les objets et les dossiers.
chemin d’accès aux
fichiers
Sauvegarde de fichier sur MinIO byte[] bytes =
[Link]().decode(dto.getFileToBase64());

Étant donné que MinIO requiert un objet de type InputStream long fileSize = [Link]();
en entrée, il est essentiel de prendre en compte que le fichier
String mimeType = [Link]();
provenant du frontend est encodé en base 64, quel que soit
String[] fileExtension = [Link]("/");
son format (que ce soit xlsx, csv ou autre). Par conséquent, il
est impératif de convertir ce fichier en un InputStream avant if ([Link]() == null) {
if ([Link] == 2) {
d'entreprendre toute opération de sauvegarde vers le serveur [Link]([Link]() + "." +
MinIO. (Voir l’image à droite) fileExtension[1]);
}
} else {
[Link]([Link]() + "." +
[Link]());
}

[Link](mimeType);
[Link](fileInputStream);
[Link](fileSize);
MinioClient minioClient = getClientMinio();

String bucketName = [Link]([Link]()) ? [Link]() :


[Link]();
[Link](bucketName);

// Vérification de l'existence du bucket sinon création


BucketExistsArgs bucketExistsArgs = [Link]()
.bucket([Link]())
.build();
boolean isExist = [Link](bucketExistsArgs); // Vérifie si le bucket existe déjà.
if (!isExist) { // Si le bucket n'existe pas, créez-le.
MakeBucketArgs makeBucketArgs = [Link]()
.bucket([Link]())
.build();
[Link](makeBucketArgs);
}
PutObjectArgs putObjectArgs = getFilesPutObjectArgs(dto);
ObjectWriteResponse subResp = [Link](putObjectArgs);

L’image ci-dessus présente le processus de sauvegarde d’un


fichier sur MinIO :
- Instanciation du client MinIO (ligne 178) ;
- Vérification de l’existence du bucket sinon on le crée (
ligne 184 - 189) ;
- Création d’un objet de type PutObjectArgs en lui
assignant la valeur que retourne la méthode
getFilesObjectArgs (ligne 190) ;
- Sauvegarde de l’objet à l’aide du client MinIO (ligne 191);
public PutObjectArgs getFilesPutObjectArgs(FilesDto dto) throws IOException {
// Récupérer les objets avec un tag spécifique
return [Link]()
.bucket([Link]())
.object([Link]([Link]()) ?
[Link]().concat([Link]()) : "") // projects/oci/[Link]
.stream([Link](), [Link](), -1)
.contentType([Link]())
.build();
}

Cette méthode permet de formater l'objet qui sera utilisé pour stocker nos données
dans notre système de gestion électronique de documents (GED) :

La méthode bucket() prend en paramètre le nom du bucket, qui est configuré dans
notre fichier [Link].

La méthode object() prend en paramètre le nom du fichier. Il est important de noter


que nous avons la possibilité de créer des sous-dossiers dans notre bucket en utilisant
la méthode object(). Par exemple, pour stocker un fichier appelé
'photodeprofi[Link]' dans un sous-dossier 'myfacture/momo/' qui stocke
dynamiquement le nom de l'utilisateur et le nom du fichier, nous utilisons :

.bucket("myfacture")
.object("myfacture/momo/photodeprofi[Link]")

Cela permet de structurer nos données de manière organisée dans notre système de
stockage MinIO.
Illustration lors du run de la méthode
getFilesPutObjectArgs()
Récupération de fichier depuis MinIO
La récupération des fichiers dans le système de gestion
électronique de documents (GED) s'effectue en se basant sur
le chemin relatif depuis le répertoire racine du bucket.

Nous allons maintenant présenter l'illustration du processus


de récupération d'un ensemble de fichiers dans le programme
ci-dessous.
public List<InputStream> getFilesListGetObjectArgs(FilesDto dto, MinioClient minioClient) throws IOException,
ServerException, ErrorResponseException, NoSuchAlgorithmException, InvalidKeyException, InvalidResponseException,
InternalException {
String fileName = [Link]([Link]()) ? [Link]().concat([Link]()) :
[Link]();
List<InputStream> fileInputStreamList = new ArrayList<>();
ListObjectsArgs listObjectsArgs = [Link]()
.bucket([Link]())
.prefix(fileName)
.recursive(true)
.build();

Iterable<Result<Item>> results = [Link](listObjectsArgs);


for (Result<Item> result : results) {
Item item = [Link]();
// getObject unitary
[Link](
[Link](
[Link]()
.bucket([Link]())
.object([Link]())
.build()
)
);
}

return fileInputStreamList;
}
- ListObjectsArg vous permet de demander la liste des
éléments dans le répertoire de base d'un bucket. Les
fichiers seront retournés sous forme d'InputStream ;

- Avec [Link], vous pouvez obtenir un fichier


individuel du stockage MinIO sous forme d'InputStream ;

NB : Les modifications effectuées à un fichier dans MinIO se font en récupérant le fichier par son
nom. Une fois les modifications effectuées, la sauvegarde se réalise en utilisant le même nom de
fichier, ce qui remplace l'ancienne version par la nouvelle.
Suppression de fichier depuis MinIO
– Tout d'abord, nous préparerons l'objet à supprimer en
utilisant la méthode removeObjectArgs de type
RemoveObjectArgs.

-Enfin, nous supprimerons le fichier en utilisant la méthode


removeFileInMinIO.

public RemoveObjectArgs removeObjectArgs(FilesDto dto) throws IOException {

String _docPath = [Link]();


String _fileName = [Link]([Link]()) ? [Link](dto) +
[Link]() : "";
return [Link]()
.bucket(_docPath)
.object(_fileName)
.build();
}

public void removeFileInMinio() throws Exception {


FilesDto dto = new FilesDto();
RemoveObjectArgs removeObjectArgs = removeObjectArgs(dto);
getClientMinio().removeObject(removeObjectArgs);
}

Vous aimerez peut-être aussi