boto3 文档没有明确指定如何更新已存在的 S3 对象的用户元数据。
原文由 arc000 发布,翻译遵循 CC BY-SA 4.0 许可协议
boto3 文档没有明确指定如何更新已存在的 S3 对象的用户元数据。
原文由 arc000 发布,翻译遵循 CC BY-SA 4.0 许可协议
您可以使用 copy_from()
提到的资源( 如此答案)执行此操作,但您也可以使用客户端的 copy_object()
并指定相同的源和目标。这些方法是等效的,并在下面调用相同的代码。
import boto3
s3 = boto3.client("s3")
src_key = "my-key"
src_bucket = "my-bucket"
s3.copy_object(Key=src_key, Bucket=src_bucket,
CopySource={"Bucket": src_bucket, "Key": src_key},
Metadata={"my_new_key": "my_new_val"},
MetadataDirective="REPLACE")
“REPLACE”值指定请求中传递的元数据应 完全 覆盖源元数据。如果您只想 添加 新的键值,或仅删除 一些 键,则必须先读取原始数据,对其进行编辑并调用更新。
仅正确替换元数据的一个 _子集_:
head_object(Key=src_key, Bucket=src_bucket)
检索原始元数据。还要注意响应中的 Etagcopy_object
以上传新元数据,但在请求中传递 CopySourceIfMatch=original_etag
以确保远程对象在覆盖它之前具有您期望的元数据。 original_etag
是您在步骤 1 中得到的。如果元数据(或数据本身)自 head_object
被调用(例如,由同时运行的另一个程序)以来发生变化, copy_object
将因 HTTP 412 错误而失败。参考: boto3 issue 389
原文由 init_js 发布,翻译遵循 CC BY-SA 4.0 许可协议
2 回答5.1k 阅读✓ 已解决
2 回答1.1k 阅读✓ 已解决
4 回答993 阅读✓ 已解决
3 回答1.1k 阅读✓ 已解决
3 回答1.2k 阅读✓ 已解决
1 回答1.7k 阅读✓ 已解决
1 回答1.2k 阅读✓ 已解决
可以使用 copy_from() 方法来完成 -