首页 > 解决方案 > 如何在 .Net Core 中的 AWS S3 中将对象从一个存储桶复制/移动到另一个存储桶

问题描述

最近我已将我的代码从 .NetFramework 迁移到 .NetCore 3.1。在执行此操作时,我陷入了处理MoveFolder功能的地方。

之前的代码如下所示。

    public void MoveS3Folder(string sourceBucket, string targetBucket, string sourceFolder, string targetFolder)
    {
        sourceFolder = sourceFolder.Replace('/', '\\');
        targetFolder = targetFolder.Replace('/', '\\');
        using (var client = AwsObjectCreator.GetAmzonS3())
        {
            var source = new S3DirectoryInfo(client, sourceBucket, sourceFolder);
            S3DirectoryInfo target = new S3DirectoryInfo(client, targetBucket, targetFolder);

            if (!target.Exists)
            {
                target.Create();
            }

            try
            {
                source.MoveTo(target);
            }
            catch (System.IO.IOException e)
            {
                if (e.Message.Equals("File already exists", StringComparison.OrdinalIgnoreCase))
                {
                    target = new S3DirectoryInfo(client, targetBucket, targetFolder + "\\" + DateTime.Now.ToString("MM-dd-yyyy hh-mm-ss"));
                    target.Create();
                    source.MoveTo(target);
                }
            }

        }
    }

因为,早些时候我们使用了具有S3DirectoryInfo类的AWSSDK.S3 Sdk 包,借助它我们已经实现了目标。

现在,我将寻找类似的解决方案 wrt AWSSDKCore.S3

到目前为止我尝试过的事情:

  1. https://www.derpturkey.com/copy-a-folder-in-amazons3-using-the-c-api/
  2. https://docs.aws.amazon.com/AmazonS3/latest/dev/CopyingObjectUsingNetSDK.html

我理解了从上述文章中复制数据的概念,但最终没有工作。

我得到的错误- “指定的密钥不存在”</p>

如果有人可以提供帮助,那将是可观的!

标签: c#.netamazon-web-servicesasp.net-coreamazon-s3

解决方案


而不是var client = AwsObjectCreator.GetAmzonS3() ----错误的方式像这样创建客户端

 IAmazonS3 client = new AmazonS3Client(awsAccessKey, awsSecretKey, RegionEndpoint.USWest2);

推荐阅读