在C# (.NET)中使用S3和云存储:AWS SDK库

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

在C# (.NET)中使用S3和云存储



现代云技术需要可靠的数据存储和管理。对象存储的事实标准之一是Amazon S3(简单存储服务)协议。在C# (.NET)生态系统中,用于操作S3及任何S3兼容存储(Yandex Object Storage、MinIO、DigitalOcean Spaces、VK Cloud)的是官方库AWS SDK for .NET(包AWSSDK.S3)。



本文将详细讲解如何引入库、配置客户端、执行基本操作(上传、下载、删除、列表)以及适配代码以使用本地S3模拟器(如MinIO)。



安装库



首先,将NuGet包添加到您的项目中:



dotnet add package AWSSDK.S3


或通过Visual Studio包管理器:



Install-Package AWSSDK.S3


创建和配置S3客户端



该库提供了AmazonS3Client类,可配置用于任何S3兼容存储。我们来看两种方案:连接Amazon S3和连接本地MinIO。



连接Amazon S3



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

var credentials = new BasicAWSCredentials("您的_ACCESS_KEY", "您的_SECRET_KEY");var config = new AmazonS3Config{ RegionEndpoint = RegionEndpoint.EUWest1 // 或其他区域};

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


连接MinIO(本地S3服务器)



using Amazon.S3;using Amazon.Runtime;

var credentials = new BasicAWSCredentials("minioadmin", "minioadmin");var config = new AmazonS3Config{ ServiceURL = "http://localhost:9000", // MinIO地址 ForcePathStyle = true, // MinIO必须设置 UseHttp = true};

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


S3基本操作



所有操作均通过客户端方法异步执行。我们来看关键场景。



1. 上传文件(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($"文件已上传。ETag: {response.ETag}");}


2. 下载文件(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($"文件已保存至 {downloadPath}");}


3. 删除文件(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($"文件已删除。HTTP状态码: {response.HttpStatusCode}");}


4. 获取文件列表(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

推荐