我正在尝试使用有效密钥复制S3对象,但CopyObject()一直返回"指定的密钥不存在。"
但是,GetObject和ListObjects会毫无问题地返回该对象 这是一个样本:
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响应中提取的。
答案 0 :(得分:0)
基于这一行:
DestinationKey = ("/UserImages/mynewkeyname.jpg"),
似乎可以合理地假设您使用源与目的地产生了相同的错误。
存储桶的根是空字符串,而不是/
,因此S3对象键不以前导斜杠开头。
为了澄清,https://example.s3.amazonaws.com/test.jpg
的对象键是test.jpg
而不是/test.jpg
。
答案 1 :(得分:0)
您还可以使用S3FileInfo.CopyTo,S3FileInfo.CopyToLocal或S3FileInfo.CopyFromLocal方法进行复制,使用AWSSDK 3.1.0进行更优雅的方式C#