【发布时间】:2021-09-08 04:54:03
【问题描述】:
有没有办法使用 AWS 开发工具包(最好用于 .Net)将对象移动到同一存储桶中的不同文件夹?
搜索所有我能看到的是复制到新位置和删除原始位置的建议(通过“CopyObjectRequest”和“DeleteObjectRequest”很容易)但是我只是想知道这是唯一的方法吗?
【问题讨论】:
标签: amazon-web-services amazon-s3 aws-sdk
有没有办法使用 AWS 开发工具包(最好用于 .Net)将对象移动到同一存储桶中的不同文件夹?
搜索所有我能看到的是复制到新位置和删除原始位置的建议(通过“CopyObjectRequest”和“DeleteObjectRequest”很容易)但是我只是想知道这是唯一的方法吗?
【问题讨论】:
标签: amazon-web-services amazon-s3 aws-sdk
原来你可以使用 Amazon.S3.IO.S3FileInfo 来获取对象,然后调用“MoveTo”方法来移动对象。
S3FileInfo currentObject = new S3FileInfo(S3Client,Bucket,CurrentKey);
S3FileInfo movedObject = currentObject.MoveTo(Bucket,NewKey);
编辑:原来上面的“MoveTo”方法只是在幕后执行复制和删除:)
【讨论】:
@user1527762 提到 S3FileInfo 在 .NET Core 版本的 AWSSDK.S3 库 (v 3.7.2.2) 中不可用。
如果您在 .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
这里是 DeleteObject:https://docs.aws.amazon.com/AmazonS3/latest/userguide/delete-objects.html
【讨论】: