Arbeit mit S3 und Cloud-Speichern in C# (.NET): AWS SDK und MinIO

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Einführung in S3 und Cloud-Speicher für .NET-Entwickler



Cloud-Objektspeicher, die mit dem Amazon S3 (Simple Storage Service)-Protokoll kompatibel sind, sind zum De-facto-Standard für die Speicherung unstrukturierter Daten geworden: Bilder, Videos, Backups, Logs und Build-Artefakte. Im C# (.NET)-Ökosystem wird die Arbeit mit solchen Speichern über das offizielle AWS SDK für .NET oder über leichtgewichtige Clients für S3-kompatible Lösungen (MinIO, Yandex Object Storage, DigitalOcean Spaces) realisiert.



In diesem Artikel werden wir die grundlegenden Operationen durchgehen: Verbindung, Bucket-Erstellung, Hochladen, Herunterladen und Löschen von Objekten. Alle Beispiele sind in C# mit .NET 8 geschrieben.



Installation der AWS SDK-Bibliothek für .NET



Für die Arbeit mit S3 aus C# muss das NuGet-Paket AWS SDK for .NET — S3 installiert werden:



dotnet add package AWSSDK.S3dotnet add package AWSSDK.Extensions.NETCore.Setup  // für DI-Integration


Wenn Sie MinIO oder andere S3-kompatible Speicher (nicht AWS) verwenden, reicht dasselbe Paket aus – es unterstützt benutzerdefinierte Endpunkte.



Grundlegende Konfiguration des S3-Clients



Wir erstellen einen Client für die Arbeit mit S3. Im folgenden Beispiel wird MinIO verwendet, das lokal auf Port 9000 läuft:



using Amazon;using Amazon.S3;using Amazon.Runtime;

var config = new AmazonS3Config{ ServiceURL = "http://localhost:9000", // für MinIO oder einen anderen S3-kompatiblen Speicher ForcePathStyle = true, // zwingend erforderlich für MinIO UseHttp = true};

var credentials = new BasicAWSCredentials("minioadmin", "minioadmin");var s3Client = new AmazonS3Client(credentials, config);


Für AWS S3 reicht es, die Region anzugeben und die Standard-Anmeldeinformationen zu verwenden:



var s3Client = new AmazonS3Client(RegionEndpoint.EUWest1);


Erstellen und Löschen eines Buckets



Bucket erstellen



public async Task CreateBucketAsync(string bucketName){    var putBucketRequest = new PutBucketRequest    {        BucketName = bucketName,        UseClientRegion = true    };    var response = await s3Client.PutBucketAsync(putBucketRequest);    Console.WriteLine($"Bucket {bucketName} erstellt. HTTP-Status: {response.HttpStatusCode}");}


Prüfen, ob ein Bucket existiert



public async Task<bool> DoesBucketExistAsync(string bucketName){    return await AmazonS3Util.DoesS3BucketExistAsync(s3Client, bucketName);}


Bucket löschen



public async Task DeleteBucketAsync(string bucketName){    await s3Client.DeleteBucketAsync(bucketName);    Console.WriteLine($"Bucket {bucketName} gelöscht.");}


Dateien hochladen (Upload)



Das häufigste Szenario ist das Hochladen einer Datei in einen Bucket. Wir verwenden PutObjectAsync:



public async Task UploadFileAsync(string bucketName, string key, string filePath){    var putRequest = new PutObjectRequest    {        BucketName = bucketName,        Key = key,        FilePath = filePath,        ContentType = "application/octet-stream"    };

var response = await s3Client.PutObjectAsync(putRequest); Console.WriteLine($"Datei {key} hochgeladen. ETag: {response.ETag}");}


Hochladen aus einem Stream – nützlich für Dateien, die vom Benutzer über ein Webformular empfangen wurden:



public async Task UploadFromStreamAsync(string bucketName, string key, Stream inputStream){    var putRequest = new PutObjectRequest    {        BucketName = bucketName,        Key = key,        InputStream = inputStream    };    await s3Client.PutObjectAsync(putRequest);}


Dateien herunterladen (Download)



Ein Objekt kann in eine Datei oder in einen Stream heruntergeladen werden:



public async Task DownloadFileAsync(string bucketName, string key, string downloadPath){                    

Empfehlungen