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

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

Arbeit mit S3 und Cloud-Speichern in C# (.NET)

\n\n

Moderne 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.

\n\n

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\n

Installation der Bibliothek

\n\n

Fügen Sie zunächst das NuGet-Paket zu Ihrem Projekt hinzu:

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

Oder über den Paketmanager von Visual Studio:

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

Erstellung und Konfiguration des S3-Clients

\n\n

Die 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.

\n\n

Verbindung zu Amazon S3

\n\n
using 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\n

Verbindung zu MinIO (lokaler S3-Server)

\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 von MinIO\n    ForcePathStyle = true,                // zwingend erforderlich für MinIO\n    UseHttp = true\n};\n\nusing var client = new AmazonS3Client(credentials, config);
\n\n

Grundlegende Operationen mit S3

\n\n

Alle Operationen werden asynchron über die Methoden des Clients ausgeführt. Betrachten wir die wichtigsten Szenarien.

\n\n

1. Hochladen einer Datei (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($"Datei hochgeladen. ETag: {response.ETag}");\n}
\n\n

2. Herunterladen einer Datei (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($"Datei gespeichert unter {downloadPath}");\n}
\n\n

3. Löschen einer Datei (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($"Datei gelöscht. HTTP-Status: {response.HttpStatusCode}");\n}
\n\n

4. Auflisten von Dateien (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                    

Empfehlungen