【问题标题】:How to copy/move object from one bucket to another in AWS S3 in .Net Core如何在 .Net Core 的 AWS S3 中将对象从一个存储桶复制/移动到另一个存储桶
【发布时间】:2021-04-13 22:21:39
【问题描述】:

最近我已将我的代码从 .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);
                }
            }

        }
    }

由于之前我们使用的是 AWSSDK.S3 Sdk 包,它具有 S3DirectoryInfo 类,在此帮助下我们达到了目标。

现在,我正在寻找类似的解决方案 w.r.t 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

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

我遇到的错误 - “指定的密钥不存在”

如果有人可以提供帮助,那将是非常重要的!

【问题讨论】:

  • " 但对我来说没有用。" - 什么不工作?您是否收到特定的错误消息?
  • @PhilipPittle 抱歉回复晚了,感谢您的强调。我得到的错误是“指定的密钥不存在”。我希望这会有所帮助!
  • 你从哪里得到这个错误? full 异常文本是什么?毕竟你不能复制一个不存在的文件。
  • 您使用的是实际的文件密钥吗?或者试图移动“文件夹”中的所有项目?云存储解决方案没有文件夹 - 当存储桶中有数百万个项目时,这种分层结构根本无法扩展。它们通过处理键中的特殊字符作为“文件夹”分隔符,并允许您使用特定前缀搜索文件。如果您有一个名为 a/b1/c1a/b1/c2a/b2/c2 等的文件,当您“列出”文件夹时a/b1 您实际上是在搜索每个文件,其密钥以 a/b1 开头

标签: c# .net amazon-web-services asp.net-core amazon-s3


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-29
    • 2018-05-08
    • 2020-09-15
    • 2018-11-22
    • 2023-02-01
    • 1970-01-01
    • 2019-06-28
    相关资源
    最近更新 更多