【发布时间】: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。
到目前为止我尝试过的事情:
- https://www.derpturkey.com/copy-a-folder-in-amazons3-using-the-c-api/
- https://docs.aws.amazon.com/AmazonS3/latest/dev/CopyingObjectUsingNetSDK.html
我从上述文章中理解了复制数据的概念,但我没有工作。
我遇到的错误 - “指定的密钥不存在”
如果有人可以提供帮助,那将是非常重要的!
【问题讨论】:
-
" 但对我来说没有用。" - 什么不工作?您是否收到特定的错误消息?
-
@PhilipPittle 抱歉回复晚了,感谢您的强调。我得到的错误是“指定的密钥不存在”。我希望这会有所帮助!
-
你从哪里得到这个错误? full 异常文本是什么?毕竟你不能复制一个不存在的文件。
-
您使用的是实际的文件密钥吗?或者试图移动“文件夹”中的所有项目?云存储解决方案没有文件夹 - 当存储桶中有数百万个项目时,这种分层结构根本无法扩展。它们通过处理键中的特殊字符作为“文件夹”分隔符,并允许您使用特定前缀搜索文件。如果您有一个名为
a/b1/c1、a/b1/c2、a/b2/c2等的文件,当您“列出”文件夹时a/b1您实际上是在搜索每个文件,其密钥以a/b1开头
标签: c# .net amazon-web-services asp.net-core amazon-s3