1

我可以使用 C# 将 S3 存储桶中的对象从一个目录移动到另一个目录,但无法复制该对象的所有当前权限。

例如,我当前的对象具有公共访问权限,但在将其移动到另一个目录后,它失去了公共读取权限。

这是我用来移动对象的代码:

public void MoveFile(string sourceBucket, string destinationFolder, string file) {
        AmazonS3Client s3Client = new AmazonS3Client(ConfigurationHelper.AmazonS3AccessKey, ConfigurationHelper.AmazonS3SecretAccessKey, Amazon.RegionEndpoint.USEast1);

        S3FileInfo currentObject = new S3FileInfo(s3Client, sourceBucket, file);
        currentObject.MoveTo(sourceBucket + "/" + destinationFolder, file);
    }

这是将文件移动到另一个目录后的输出:

它失去了公开的“读取”权限。

4

1 回答 1

3

我自己解决了问题,通过使用 CopyObject() 和 DeleteObject() 而不是使用 moveTo inbuild 方法,这解决了我的问题,

这是真正帮助我的代码:

CopyObjectRequest copyObjectRequest = new CopyObjectRequest
        {
            SourceBucket = sourceBucket,
            DestinationBucket = sourceBucket + "/" + destinationFolder,
            SourceKey = file,
            DestinationKey = file,
            CannedACL = S3CannedACL.PublicRead,
            StorageClass = S3StorageClass.StandardInfrequentAccess,
        };

        CopyObjectResponse response1 = s3Client.CopyObject(copyObjectRequest);

        var deleteObjectRequest = new DeleteObjectRequest
        {
            BucketName = sourceBucket,
            Key = file
        };

        s3Client.DeleteObject(deleteObjectRequest);

我正在发布答案,以便对某人有所帮助!!!

于 2022-02-10T10:09:28.583 回答