Amazon s3 更新我的S3对象的现有元数据

Amazon s3 更新我的S3对象的现有元数据,amazon-s3,boto3,Amazon S3,Boto3,我正在尝试更新S3对象的现有元数据,但尽管进行了更新,仍在创建新的元数据。根据文档,它显示了相同的方式,但不知道为什么它不能更新它 k = s3.head_object(Bucket='test-bucket', Key='test.json') s3.copy_object(Bucket='test-bucket', Key='test.json', CopySource='test-bucket' + '/' + 'test.json', Metadata={'Co

我正在尝试更新S3对象的现有元数据,但尽管进行了更新,仍在创建新的元数据。根据文档,它显示了相同的方式,但不知道为什么它不能更新它

 k = s3.head_object(Bucket='test-bucket', Key='test.json')
            s3.copy_object(Bucket='test-bucket', Key='test.json', CopySource='test-bucket' + '/' + 'test.json', Metadata={'Content-Type': 'text/plain'}, MetadataDirective='REPLACE')

S3元数据是只读的,因此不可能只更新S3对象的元数据。更新元数据的唯一方法是重新创建/复制对象。检查报告的第一段

您可以在上载对象元数据时设置它。上载对象后,无法修改对象元数据。修改对象元数据的唯一方法是复制对象并设置元数据


我能够使用
copy\u from
方法进行更新

s3 = boto3.resource('s3')
object = s3.Object(bucketName, uploadedKey)
object.copy_from(
    CopySource={'Bucket': bucketName,'Key': uploadedKey},
    MetadataDirective="REPLACE",
    ContentType=value
) 

谢谢你的回答。即使我尝试使用相同的过程更改bucket,它仍然添加了一个额外的元数据啊,好吧,所以要明确一点:问题是s3添加了您不想要的额外元数据?也许更新标题反映了实际问题?@Exelian这对我有用s3=boto3.resource('s3')object=s3.object(bucketName,uploadedKey)object.copy_from(CopySource={'Bucket':bucketName,'Key':uploadedKey},MetadataDirective=“REPLACE”,ContentType=value)如果这个答案对你有效,你可以接受你自己的答案。这将增加未来用户的可视性。