You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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-

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 02:45:37