在 AWS 中使用 C# 将对象从一个文件夹移动到同一个 S3 存储桶中的另一个文件夹
Amazon S3(简单存储服务)是 Amazon Web Services (AWS) 提供的可扩展存储服务。它被广泛用于随时随地从网络上的任何位置存储和检索任意数量的数据。在本博客中,我们将逐步介绍使用 C# 将文件夹从一个根目录移动到另一个根目录的步骤。
介绍
Amazon S3 旨在让网络规模计算变得更加简单,它允许用户随时随地从网络上的任何位置存储和检索任意数量的数据。它为开发人员和 IT 团队提供安全、耐用、高度可扩展的对象存储。S3 的一些常见用例包括数据备份和还原、灾难恢复、数据存档以及网站和应用程序的内容存储。
关键概念
逐步实施
1.设置适用于 .NET 的 AWS SDK
确保已安装适用于 .NET 的 AWS SDK。您可以通过 NuGet 包管理器安装它。
Install-Package AWSSDK.S3
2.初始化 Amazon S3 客户端
使用您的 AWS 凭证创建 AmazonS3Client 实例。
using Amazon.S3;
using Amazon.S3.Model;
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
namespace S3FolderMove
{
class Program
{
private static readonly string sourceFolder = "source-folder/";
private static readonly string destinationFolder = "destination-folder/";
private static readonly string bucketName = "your-bucket-name";
private static readonly AmazonS3Client s3Client = new AmazonS3Client(Amazon.RegionEndpoint.USEast1);
static async Task Main(string[] args)
{
await MoveFolderAsync(sourceFolder, destinationFolder);
Console.WriteLine("Folder moved successfully.");
}
public static async Task MoveFolderAsync(string sourceFolder, string destinationFolder)
{
ListObjectsV2Request listRequest = new ListObjectsV2Request
{
BucketName = bucketName,
Prefix = sourceFolder
};
ListObjectsV2Response listResponse;
do
{
listResponse = await s3Client.ListObjectsV2Async(listRequest);
foreach (S3Object s3Object in listResponse.S3Objects)
{
string sourceKey = s3Object.Key;
string destinationKey = destinationFolder + sourceKey.Substring(sourceFolder.Length);
// Copy the object
CopyObjectRequest copyRequest = new CopyObjectRequest
{
SourceBucket = bucketName,
SourceKey = sourceKey,
DestinationBucket = bucketName,
DestinationKey = destinationKey
};
await s3Client.CopyObjectAsync(copyRequest);
// Delete the original object
DeleteObjectRequest deleteRequest = new DeleteObjectRequest
{
BucketName = bucketName,
Key = sourceKey
};
await s3Client.DeleteObjectAsync(deleteRequest);
Console.WriteLine($"Moved {sourceKey} to {destinationKey}");
}
listRequest.ContinuationToken = listResponse.NextContinuationToken;
} while (listResponse.IsTruncated);
}
}
}代码解释
Amazon S3 客户端初始化
private static readonly AmazonS3Client s3Client = new AmazonS3Client(Amazon.RegionEndpoint.USEast1);
这将使用指定的 AWS 区域初始化 S3 客户端。确保您的 AWS 凭证配置正确。
列出对象
ListObjectsV2Request listRequest = new ListObjectsV2Request
{
BucketName = bucketName,
Prefix = sourceFolder
};这将创建一个请求以列出源文件夹中的所有对象。
复制和删除对象
foreach (S3Object s3Object in listResponse.S3Objects)
{
string sourceKey = s3Object.Key;
string destinationKey = destinationFolder + sourceKey.Substring(sourceFolder.Length);
// Copy the object
CopyObjectRequest copyRequest = new CopyObjectRequest
{
SourceBucket = bucketName,
SourceKey = sourceKey,
DestinationBucket = bucketName,
DestinationKey = destinationKey
};
await s3Client.CopyObjectAsync(copyRequest);
// Delete the original object
DeleteObjectRequest deleteRequest = new DeleteObjectRequest
{
BucketName = bucketName,
Key = sourceKey
};
await s3Client.DeleteObjectAsync(deleteRequest);
}此代码将每个对象从源文件夹复制到目标文件夹,然后从源文件夹中删除原始对象。
结论
在 S3 存储桶内移动文件夹涉及列出对象、将其复制到新位置以及删除原始对象。使用 AWS SDK for .NET 可使此过程变得简单而高效。使用提供的代码片段,您可以轻松地在 C# 应用程序中实现此功能。
通过了解和利用 S3 的强大功能,您可以有效地管理和操作数据,确保数据井然有序且易于访问。这种方法对各种用例都有好处,例如数据迁移、重组和归档流程。