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-IntegrationWenn 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){ Auch in der Bibliothek
Arbeiten mit XML in Swift: Parsen, Erstellen und Verarbeiten von Daten (iOS/macOS)
Überwachung von Swift-Anwendungen: Bibliotheken für iOS und macOS