Arbeit mit S3 und Cloud-Speichern in C# (.NET)
\n\nModerne Cloud-Technologien erfordern eine zuverlässige Datenspeicherung und -verwaltung. Einer der De-facto-Standards für die Objektspeicherung ist das Amazon S3-Protokoll (Simple Storage Service). Im C# (.NET)-Ökosystem wird für die Arbeit mit S3 und beliebigen S3-kompatiblen Speichern (Yandex Object Storage, MinIO, DigitalOcean Spaces, VK Cloud) die offizielle Bibliothek AWS SDK for .NET (Paket AWSSDK.S3) verwendet.
In diesem Artikel werden wir im Detail besprechen, wie man die Bibliothek einbindet, den Client konfiguriert, grundlegende Operationen (Hochladen, Herunterladen, Löschen, Auflisten) durchführt und den Code für die Arbeit mit lokalen S3-Emulatoren wie MinIO anpasst.
\n\nInstallation der Bibliothek
\n\nFügen Sie zunächst das NuGet-Paket zu Ihrem Projekt hinzu:
\n\ndotnet add package AWSSDK.S3\n\nOder über den Paketmanager von Visual Studio:
\n\nInstall-Package AWSSDK.S3\n\nErstellung und Konfiguration des S3-Clients
\n\nDie Bibliothek stellt die Klasse AmazonS3Client bereit, die für die Arbeit mit jedem S3-kompatiblen Speicher konfiguriert werden kann. Betrachten wir zwei Varianten: die Verbindung zu Amazon S3 und zu einem lokalen MinIO.
Verbindung zu Amazon S3
\n\nusing Amazon;\nusing Amazon.S3;\nusing Amazon.Runtime;\n\nvar credentials = new BasicAWSCredentials("ihr_ACCESS_KEY", "ihr_SECRET_KEY");\nvar config = new AmazonS3Config\n{\n RegionEndpoint = RegionEndpoint.EUWest1 // oder eine andere Region\n};\n\nusing var client = new AmazonS3Client(credentials, config);\n\nVerbindung zu MinIO (lokaler S3-Server)
\n\nusing Amazon.S3;\nusing Amazon.Runtime;\n\nvar credentials = new BasicAWSCredentials("minioadmin", "minioadmin");\nvar config = new AmazonS3Config\n{\n ServiceURL = "http://localhost:9000", // Adresse von MinIO\n ForcePathStyle = true, // zwingend erforderlich für MinIO\n UseHttp = true\n};\n\nusing var client = new AmazonS3Client(credentials, config);\n\nGrundlegende Operationen mit S3
\n\nAlle Operationen werden asynchron über die Methoden des Clients ausgeführt. Betrachten wir die wichtigsten Szenarien.
\n\n1. Hochladen einer Datei (Upload)
\n\nusing 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($"Datei hochgeladen. ETag: {response.ETag}");\n}\n\n2. Herunterladen einer Datei (Download)
\n\npublic 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($"Datei gespeichert unter {downloadPath}");\n}\n\n3. Löschen einer Datei (Delete)
\n\npublic 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($"Datei gelöscht. HTTP-Status: {response.HttpStatusCode}");\n}\n\n4. Auflisten von Dateien (List Objects)
\n\npublic 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