AWS S3 - 将对象移动到不同的文件夹

AWS S3 - Move an object to a different folder

有什么方法可以使用 AWS SDK(最好是 .Net)将对象移动到同一存储桶中的不同文件夹?

四处搜索我能看到的是复制到新位置和删除原始位置的建议(通过 "CopyObjectRequest" 和 "DeleteObjectRequest" 很容易)但是我只是想知道这是不是唯一的方法?

原来可以使用Amazon.S3.IO.S3FileInfo获取对象然后调用"MoveTo"方法移动对象

S3FileInfo currentObject = new S3FileInfo(S3Client,Bucket,CurrentKey);
S3FileInfo movedObject = currentObject.MoveTo(Bucket,NewKey);

编辑:事实证明,上面的 "MoveTo" 方法只是在幕后执行复制和删除:)

更多信息:
https://docs.aws.amazon.com/sdkfornet/v3/apidocs/index.html?page=S3/TS3IOS3FileInfo.html&tocid=Amazon_S3_IO_S3FileInfo

如@user1527762 所述,S3FileInfo 在 AWSSDK.S3 库 (v 3.7.2.2) 的 .NET Core 版本中不可用。

如果您使用的是 .net 核心,则可以使用 CopyObject 将对象从一个存储桶移动到另一个存储桶。

var s3Client = new AmazonS3Client(RegionEndpoint.USEast1);
var copyRequest = new CopyObjectRequest
                      {
                          SourceBucket = "source-bucket",
                          SourceKey = "fileName",
                          DestinationBucket = "dest-bucket",
                          DestinationKey = "fileName.jpg",
                          CannedACL = S3CannedACL.PublicRead,
                       };
 var copyResponse = await s3Client.CopyObjectAsync(copyRequest);

CopyObject 不会删除源对象,因此您必须像这样调用 delete:

 DeleteObjectRequest request = new DeleteObjectRequest
            {
                BucketName = "source-bucket",
                Key = "fileName.jpg"
            };

            await s3Client .DeleteObjectAsync(request);

此处有关 CopyObject 的详细信息:https://docs.aws.amazon.com/AmazonS3/latest/userguide/copy-object.html

并在此处删除对象:https://docs.aws.amazon.com/AmazonS3/latest/userguide/delete-objects.html