Lambda调用S3 PutObject时遇ChecksumAlgorithm未知参数报错
解决S3 PutObject接口ChecksumAlgorithm参数未知的问题
问题分析
你遇到的错误由两个原因导致:
1. Lambda环境的boto3版本过低
ChecksumAlgorithm是S3 PutObject接口后续新增的参数,Lambda默认提供的boto3版本可能未适配该参数,因此触发参数校验失败的错误。
2. 代码中Body参数传递错误
当前代码里Body=filename是错误写法,应该传入打开的文件对象file,否则会把文件名字符串当作文件内容上传,而非目标文件的实际内容。
解决方案
步骤1:升级boto3版本
Lambda默认的boto3版本通常滞后于官方最新版,可通过两种方式升级:
- 使用Lambda层:创建包含最新版boto3的层,附加到你的Lambda函数上。
- 打包自定义依赖:在本地安装最新版boto3,将其与代码一起打包为zip包上传到Lambda。
步骤2:修正代码中的Body参数
修改put_object的Body参数为打开的文件对象,同时确保ChecksumAlgorithm使用合法取值(支持SHA1、SHA256、CRC32、CRC32C)。
修正后的代码示例:
import boto3 s3_conn = boto3.client('s3') bucket_name = "test123" def lambda_handler(event, context): filename = "./sample.txt" with open(filename, 'rb') as file: response = s3_conn.put_object( Bucket=bucket_name, Key='Test.txt', Body=file, # 改为传入打开的文件对象 ChecksumAlgorithm='SHA1' ) print(response)
验证方式
升级boto3并修正代码后重新测试:
- 上传成功时,响应会包含对应算法的校验和字段(如指定SHA1则返回
ChecksumSHA1)。 - 可在S3控制台查看对象的校验和信息,确认上传内容正确。
内容的提问来源于stack exchange,提问作者VN-
相关产品推荐
相关产品推荐

