Travailler avec S3 et les stockages cloud en C# (.NET) : bibliothèque AWS SDK

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Travailler avec S3 et les stockages cloud en C# (.NET)

\n\n

Les technologies cloud modernes nécessitent un stockage et une gestion fiables des données. L'un des standards de facto pour le stockage objet est le protocole Amazon S3 (Simple Storage Service). Dans l'écosystème C# (.NET), pour travailler avec S3 et tout stockage compatible S3 (Yandex Object Storage, MinIO, DigitalOcean Spaces, VK Cloud), on utilise la bibliothèque officielle AWS SDK for .NET (package AWSSDK.S3).

\n\n

Dans cet article, nous allons détailler comment ajouter la bibliothèque, configurer le client, effectuer les opérations de base (téléchargement, téléchargement, suppression, listage) et adapter le code pour fonctionner avec des émulateurs S3 locaux comme MinIO.

\n\n

Installation de la bibliothèque

\n\n

Pour commencer, ajoutez le package NuGet à votre projet :

\n\n
dotnet add package AWSSDK.S3
\n\n

Ou via le gestionnaire de packages Visual Studio :

\n\n
Install-Package AWSSDK.S3
\n\n

Création et configuration du client S3

\n\n

La bibliothèque fournit la classe AmazonS3Client, qui peut être configurée pour fonctionner avec tout stockage compatible S3. Examinons deux options : la connexion à Amazon S3 et à MinIO local.

\n\n

Connexion à Amazon S3

\n\n
using Amazon;\nusing Amazon.S3;\nusing Amazon.Runtime;\n\nvar credentials = new BasicAWSCredentials("votre_ACCESS_KEY", "votre_SECRET_KEY");\nvar config = new AmazonS3Config\n{\n    RegionEndpoint = RegionEndpoint.EUWest1 // ou une autre région\n};\n\nusing var client = new AmazonS3Client(credentials, config);
\n\n

Connexion à MinIO (serveur S3 local)

\n\n
using Amazon.S3;\nusing Amazon.Runtime;\n\nvar credentials = new BasicAWSCredentials("minioadmin", "minioadmin");\nvar config = new AmazonS3Config\n{\n    ServiceURL = "http://localhost:9000", // adresse de MinIO\n    ForcePathStyle = true,                // obligatoire pour MinIO\n    UseHttp = true\n};\n\nusing var client = new AmazonS3Client(credentials, config);
\n\n

Opérations principales avec S3

\n\n

Toutes les opérations sont effectuées de manière asynchrone via les méthodes du client. Examinons les scénarios clés.

\n\n

1. Téléchargement d'un fichier (Upload)

\n\n
using Amazon.S3;\nusing Amazon.S3.Model;\n\npublic async Task UploadFileAsync(IAmazonS3 client, string bucketName, string filePath, string key)\n{\n    var request = new PutObjectRequest\n    {\n        BucketName = bucketName,\n        Key = key,\n        FilePath = filePath\n    };\n\n    var response = await client.PutObjectAsync(request);\n    Console.WriteLine($"Fichier téléchargé. ETag : {response.ETag}");\n}
\n\n

2. Téléchargement d'un fichier (Download)

\n\n
public async Task DownloadFileAsync(IAmazonS3 client, string bucketName, string key, string downloadPath)\n{\n    var request = new GetObjectRequest\n    {\n        BucketName = bucketName,\n        Key = key\n    };\n\n    using var response = await client.GetObjectAsync(request);\n    await response.WriteResponseStreamToFileAsync(downloadPath, false, CancellationToken.None);\n    Console.WriteLine($"Fichier sauvegardé dans {downloadPath}");\n}
\n\n

3. Suppression d'un fichier (Delete)

\n\n
public async Task DeleteFileAsync(IAmazonS3 client, string bucketName, string key)\n{\n    var request = new DeleteObjectRequest\n    {\n        BucketName = bucketName,\n        Key = key\n    };\n\n    var response = await client.DeleteObjectAsync(request);\n    Console.WriteLine($"Fichier supprimé. Statut HTTP : {response.HttpStatusCode}");\n}
\n\n

4. Obtention de la liste des fichiers (List Objects)

\n\n
public async Task ListFilesAsync(IAmazonS3 client, string bucketName)\n{\n    var request = new ListObjectsV2Request\n    {\n        BucketName = bucketName,\n        MaxKeys = 100\n    };\n\n    ListObjectsV2Response response;\n    do\n    {\n        response = await client.ListObjectsV2Async(request);\n        \n        foreach (var obj in respo                    

Recommendations