AWS S3 - 将对象移动到其他文件夹

Nav*_*lal 4 amazon-s3 amazon-web-services aws-sdk

有没有办法使用AWS SDK将对象移动到同一个存储桶中的不同文件夹(最好是.Net)?

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

Nav*_*lal 8

事实证明,您可以使用Amazon.S3.IO.S3FileInfo来获取对象,然后调用"MoveTo"方法来移动对象.

S3FileInfo currentObject = new S3FileInfo(S3Client,Bucket,CurrentKey);
S3FileInfo movedObject = currentObject.MoveTo(Bucket,NewKey);
Run Code Online (Sandbox Code Playgroud)

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

有关详细信息,请访问:https:
//docs.aws.amazon.com/sdkfornet/v3/apidocs/index.html?page = S3/TS3IOS3FileInfo.html&tocid = Amazon_S3_IO_S3FileInfo

  • 你永远不会猜到幕后的情况.:) (4认同)
  • 大声笑它复制和删除!(https://github.com/aws/aws-sdk-net/blob/master/AWSSDK_DotNet35/Amazon.S3/IO/S3FileInfo.cs) (2认同)
  • .net 核心 S3 SDK 不支持此功能。 (2认同)

Chr*_*gan 5

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

如果您使用 .net core,则可以使用 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);
Run Code Online (Sandbox Code Playgroud)

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

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

            await s3Client .DeleteObjectAsync(request);
Run Code Online (Sandbox Code Playgroud)

有关 CopyObject 的详细信息,请参见:https://docs.aws.amazon.com/AmazonS3/latest/userguide/copy-object.html

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