Trabajo con S3 y almacenamiento en la nube en C# (.NET): biblioteca AWS SDK

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Trabajo con S3 y almacenamiento en la nube en C# (.NET)



Las tecnologías modernas en la nube requieren almacenamiento y gestión de datos confiables. Uno de los estándares de facto para el almacenamiento de objetos es el protocolo Amazon S3 (Simple Storage Service). En el ecosistema de C# (.NET), para trabajar con S3 y cualquier almacenamiento compatible con S3 (Yandex Object Storage, MinIO, DigitalOcean Spaces, VK Cloud) se utiliza la biblioteca oficial AWS SDK for .NET (paquete AWSSDK.S3).



En este artículo, analizaremos en detalle cómo conectar la biblioteca, configurar el cliente, realizar operaciones básicas (carga, descarga, eliminación, listado) y adaptar el código para trabajar con emuladores locales de S3, como MinIO.



Instalación de la biblioteca



Para empezar, agregue el paquete NuGet a su proyecto:



dotnet add package AWSSDK.S3


O a través del administrador de paquetes de Visual Studio:



Install-Package AWSSDK.S3


Creación y configuración del cliente S3



La biblioteca proporciona la clase AmazonS3Client, que se puede configurar para trabajar con cualquier almacenamiento compatible con S3. Veamos dos opciones: conexión a Amazon S3 y a MinIO local.



Conexión a Amazon S3



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

var credentials = new BasicAWSCredentials("su_ACCESS_KEY", "su_SECRET_KEY");var config = new AmazonS3Config{ RegionEndpoint = RegionEndpoint.EUWest1 // u otra región};

using var client = new AmazonS3Client(credentials, config);


Conexión a MinIO (servidor S3 local)



using Amazon.S3;using Amazon.Runtime;

var credentials = new BasicAWSCredentials("minioadmin", "minioadmin");var config = new AmazonS3Config{ ServiceURL = "http://localhost:9000", // dirección de MinIO ForcePathStyle = true, // obligatorio para MinIO UseHttp = true};

using var client = new AmazonS3Client(credentials, config);


Operaciones básicas con S3



Todas las operaciones se realizan de forma asíncrona a través de los métodos del cliente. Veamos los escenarios clave.



1. Carga de archivo (Upload)



using Amazon.S3;using Amazon.S3.Model;

public async Task UploadFileAsync(IAmazonS3 client, string bucketName, string filePath, string key){ var request = new PutObjectRequest { BucketName = bucketName, Key = key, FilePath = filePath };

var response = await client.PutObjectAsync(request); Console.WriteLine($"Archivo cargado. ETag: {response.ETag}");}


2. Descarga de archivo (Download)



public async Task DownloadFileAsync(IAmazonS3 client, string bucketName, string key, string downloadPath){    var request = new GetObjectRequest    {        BucketName = bucketName,        Key = key    };

using var response = await client.GetObjectAsync(request); await response.WriteResponseStreamToFileAsync(downloadPath, false, CancellationToken.None); Console.WriteLine($"Archivo guardado en {downloadPath}");}


3. Eliminación de archivo (Delete)



public async Task DeleteFileAsync(IAmazonS3 client, string bucketName, string key){    var request = new DeleteObjectRequest    {        BucketName = bucketName,        Key = key    };

var response = await client.DeleteObjectAsync(request); Console.WriteLine($"Archivo eliminado. Estado HTTP: {response.HttpStatusCode}");}


4. Obtención de lista de archivos (List Objects)



public async Task ListFilesAsync(IAmazonS3 client, string bucketName){    var request = new ListObjectsV2Request    {        BucketName = bucketName,        MaxKeys = 100    };

ListObjectsV2Response response; do { response = await client.ListObjectsV2Async(request); foreach (var obj in respo

Recommendations