Bibliothèque minio-go pour travailler avec S3 et les stockages cloud en Go
Dans le développement moderne, il est de plus en plus fréquent de devoir intégrer des stockages cloud compatibles avec le protocole Amazon S3 (Simple Storage Service). Que ce soit AWS S3, Yandex.Cloud, DigitalOcean Spaces, MinIO ou tout autre service compatible S3, le langage Go offre une solution élégante et performante : la bibliothèque minio-go.
Minio-go est le client Go officiel pour l'API Amazon S3, développé par la société MinIO. Il fournit un ensemble complet de fonctions pour gérer les buckets et les objets, prend en charge le téléversement/téléchargement en streaming, le chiffrement, le versionnage et de nombreuses autres fonctionnalités de S3. La bibliothèque est entièrement compatible avec AWS S3 et tout autre stockage compatible S3.
Installation
L'installation de la bibliothèque se fait de manière standard via go get :
go get github.com/minio/minio-go/v7Connexion et configuration du client
Pour commencer, il faut créer un client en spécifiant l'endpoint, la clé d'accès et la clé secrète. Exemple de connexion à MinIO (local ou cloud) :
package main
import ( "context" "log" "github.com/minio/minio-go/v7" "github.com/minio/minio-go/v7/pkg/credentials")
func main() { ctx := context.Background() // Paramètres de connexion endpoint := "play.min.io" // ou votre endpoint accessKeyID := "Q3AM3UQ867SPQQA43P2F" secretAccessKey := "zuf+tfteSlswRu7BJ86wekitnifILbZam1KYY3TG" useSSL := true
// Création du client client, err := minio.New(endpoint, &minio.Options{ Creds: credentials.NewStaticV4(accessKeyID, secretAccessKey, ""), Secure: useSSL, }) if err != nil { log.Fatalf("Erreur lors de la création du client : %v", err) }
log.Println("Connexion au stockage S3 établie")}Gestion des buckets
Un bucket est un répertoire racine dans un stockage S3. Voici les opérations principales :
Création d'un bucket
bucketName := "my-go-bucket"location := "us-east-1"
err = client.MakeBucket(ctx, bucketName, minio.MakeBucketOptions{ Region: location,})if err != nil { log.Printf("Impossible de créer le bucket : %v", err)} else { log.Printf("Bucket '%s' créé avec succès", bucketName)}Vérification de l'existence d'un bucket
exists, err := client.BucketExists(ctx, bucketName)if err != nil { log.Fatalf("Erreur lors de la vérification du bucket : %v", err)}if exists { log.Printf("Le bucket '%s' existe", bucketName)}Liste de tous les buckets
buckets, err := client.ListBuckets(ctx)if err != nil { log.Fatalf("Erreur lors de la récupération de la liste des buckets : %v", err)}for _, bucket := range buckets { log.Printf("Bucket : %s, créé le : %s", bucket.Name, bucket.CreationDate)}Téléversement de fichiers (upload)
Minio-go prend en charge le téléversement de fichiers depuis le système de fichiers local, depuis un io.Reader et depuis un buffer en mémoire. Exemple de téléversement d'un fichier :
objectName := "example.txt"filePath := "/path/to/local/file.txt"contentType := "text/plain"
// Téléversement du fichiern, err := client.FPutObject(ctx, bucketName, objectName, filePath, minio.PutObjectOptions{ ContentType: contentType,})if err != nil { log.Fatalf("Erreur lors du téléversement du fichier : %v", err)}log.Printf("Fichier '%s' téléversé, taille : %d octets", objectName, n.Size)Téléversement depuis la mémoire (bytes/reader)
import "strings"
data := strings.NewReader("Bonjour, stockage S3 !")objectName := "hello.txt"
n, err := client.PutObject(ctx, bucketName, objectName, data, int64(data.Len()), minio.PutObjectOptions{ ContentType: "text/plain",})if err != nil { log.Fatalf("Erreur lors du téléversement des données : %v", err)}log.Printf("%d octets téléversés", n.Size) Aussi dans la bibliothèque
Traitement d'images en Java : bibliothèques et exemples de code
Client Redis pour Java : Jedis, Lettuce et Redisson — aperçu et exemples
ORM pour Java : comparaison de Hibernate, MyBatis et JPA avec exemples
Travailler avec Markdown en Java : bibliothèques, analyse et conversion