使用s3cmd从EC2向配置Object Lock的S3存储桶传数据报错求助
报错根因
s3 error: 400 (invalidrequest): content-md5 http header is required for put object requests with object lock parameters
S3对象存储规范强制要求:所有携带Object Lock相关参数(包含保留模式、保留到期时间、法律保留状态等)的PUT对象请求,必须在请求头中携带Content-MD5字段做内容完整性校验,避免锁定已损坏的对象。默认配置下s3cmd不会主动为普通PUT请求生成该字段,因此触发报错。
解决方法
- 临时生效方案:执行传输命令时添加
--add-header=Content-MD5:参数,s3cmd会自动计算文件MD5值并填充到请求头中,示例命令如下:s3cmd put 本地文件路径 s3://目标存储桶名/存放路径 --add-header=Content-MD5: - 永久生效方案:编辑s3cmd默认配置文件
~/.s3cfg,找到enable_md5配置项,将值修改为True,如果配置文件中没有该字段直接新增即可:
配置修改完成后,后续所有PUT请求都会自动携带enable_md5 = TrueContent-MD5头,无需每次添加命令行参数。 - 兼容问题排查:如果上述配置不生效,检查s3cmd版本,低于2.2.0的版本对Object Lock特性支持存在缺陷,升级到最新稳定版后再执行上述配置即可。
内容的提问来源于stack exchange,提问作者madhan
相关产品推荐
相关产品推荐

