PowerShell复制文件到开启Object Lock的AWS S3桶Content-MD5报错求助
问题解决:上传文件到开启Object Lock的S3存储桶报错Content-MD5缺失
报错原文:
Write-S3Object : Content-MD5 HTTP header is required for Put Object requests with Object Lock parameters
该报错核心原因是:开启了Object Lock功能的S3存储桶,当PUT请求携带Object Lock相关参数时,AWS会强制要求请求头中包含Content-MD5字段用于校验文件完整性,旧版本的AWS Tools for PowerShell默认不会自动生成该字段,因此触发报错。
方案1:继续使用PowerShell Write-S3Object命令
- 优先更新AWS Tools for PowerShell到最新版本
从4.1.0版本开始,AWS.Tools.S3模块的Write-S3Object已自动处理Object Lock场景下的Content-MD5生成逻辑,直接执行更新命令即可:Update-Module AWS.Tools.S3 -Force
更新后直接按原有逻辑调用Write-S3Object即可,无需额外修改参数。 - 无法更新模块的场景,手动计算并传入MD5头
先计算目标文件的Base64编码MD5值,再通过-Header参数传入请求头,示例代码如下:# 计算文件MD5并转Base64 $filePath = "C:\SSIS\生成的目标文件.csv" $md5 = [System.Security.Cryptography.MD5]::Create() $fileHash = $md5.ComputeHash([System.IO.File]::ReadAllBytes($filePath)) $contentMd5 = [System.Convert]::ToBase64String($fileHash) # 上传到S3,携带Object Lock配置 Write-S3Object -BucketName "你的存储桶名称" ` -Key "自定义前缀/目标文件名.csv" ` -File $filePath ` -ObjectLockMode "COMPLIANCE" ` -ObjectLockRetainUntilDate (Get-Date).AddDays(30) ` -Header @{"Content-MD5" = $contentMd5}
方案2:使用AWS CLI上传(更稳定,推荐)
AWS CLI的s3相关命令会自动处理所有S3规则要求的请求头,不需要手动计算MD5,直接调用即可,示例命令:
aws s3 cp C:\SSIS\生成的目标文件.csv s3://你的存储桶名称/自定义前缀/目标文件名.csv \ --object-lock-mode COMPLIANCE \ --object-lock-retain-until-date "2024-12-31T00:00:00Z"
该方案更适合SSIS调度场景,直接在SSIS的「执行进程任务」中调用AWS CLI即可,容错率更高。
内容的提问来源于stack exchange,提问作者Stockburn
相关产品推荐
相关产品推荐

