AWSSDK,S3 CopyObjectRequest 返回有效密钥的 NoSuchKey 错误

AWSSDK, S3 CopyObjectRequest returning NoSuchKey error for valid key

我正在尝试使用有效密钥复制 S3 对象,但 CopyObject() 保持 returning "The specified key does not exist."

但是,GetObject 和 ListObjects return 对象没有问题。
这是一个示例:

var copyReq = new CopyObjectRequest
{
    SourceBucket = bucketName,
    SourceKey = key,
    DestinationBucket = bucketName,
    DestinationKey = ("/UserImages/mynewkeyname.jpg"),
    StorageClass = S3StorageClass.StandardInfrequentAccess,
    CannedACL = Amazon.S3.S3CannedACL.PublicRead
};

s3.CopyObject(copyReq);

ListObjectsResponse listResponse = s3.ListObjects(new ListObjectsRequest
{
    BucketName = bucketName,
    MaxKeys = 1,
    Prefix = key
});

var request = new Amazon.S3.Model.GetObjectRequest()
    {
        BucketName = bucketName,
        Key = key,
    };

var getResponse = s3.GetObject(request);

key 和 bucketname 在其他地方定义,但它们是从其他 API 响应中提取的。

基于这条线:

DestinationKey = ("/UserImages/mynewkeyname.jpg"),

这似乎是一个合理的假设,即您对源犯了与对目标相同的错误。

存储桶的根是空字符串,而不是 /,因此 S3 对象键不以前导斜杠开头。

澄清一下,https://example.s3.amazonaws.com/test.jpg 的对象键是 test.jpg 而不是 /test.jpg

您还可以使用 S3FileInfo.CopyTo、S3FileInfo.CopyToLocal 或 S3FileInfo.CopyFromLocal 方法执行复制,这是使用 AWS SDK 3.1.0 C#[=10 执行此操作的更优雅的方法=]