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

AWS Lambda调用时截断Base64编码.docx payload问题求助

排查Lambda接收Base64 payload被截断的问题

1. 区分日志截断和实际payload截断

Lambda日志在CloudWatch控制台显示时会自动截断长内容,但实际接收的payload可能是完整的。先在Lambda函数中添加代码,打印event["body"]的长度、首尾字符,和本地构造的payload对比:

def lambda_handler(event, context):
    body = event.get("body", "")
    print(f"Received body length: {len(body)}")
    print(f"Start: {body[:50]}...")
    print(f"End: ...{body[-50:]}")
    # 后续逻辑

将打印的长度与本地Base64字符串的长度对比:如果长度一致,说明payload完整,日志显示的截断只是控制台的显示限制;如果长度不一致,说明payload确实被截断。

2. 检查CLI调用方式是否正确

直接在命令行输入长payload字符串可能被shell截断,正确做法是将payload写入JSON文件,通过file://引用:

  1. 创建payload.json文件,内容示例:
{"body": "{\"document\": \"你的Base64编码字符串\"}"}
  1. 使用CLI调用:
aws lambda invoke --function-name 你的函数名 --payload file://payload.json response.json

3. 验证Base64编码的合法性

确保Base64字符串没有额外换行、空格或非标准字符:

  • 本地解码验证:用Python将Base64字符串解码,检查是否能还原为原docx文件:
import base64

with open("encoded.txt", "r") as f:
    encoded = f.read().replace("\n", "").replace(" ", "")  # 移除可能的换行和空格

with open("test.docx", "wb") as f:
    f.write(base64.b64decode(encoded))

如果解码后文件能正常打开,说明编码没问题。

4. 检查JSON转义问题

如果你的body是一个JSON字符串(比如包含document字段的对象),确保构造payload时正确转义双引号:

  • 错误示例(直接在命令行输入,未转义):
aws lambda invoke --payload '{"body": "{"document": "base64"}"}' ...

这种写法会被shell解析错误,导致payload不完整。必须用文件方式传递,或者正确转义:

aws lambda invoke --payload '{"body": "{\"document\": \"base64\"}"}' ...

5. 排除Lambda代码逻辑问题

如果payload长度一致但json.loads报错,检查:

  • 是否重复解析:如果event["body"]本身已经是解析后的JSON对象(比如API Gateway开启了“Lambda proxy integration”时,body可能是字符串,但如果是直接CLI传的JSON结构,body可能是对象),此时不需要再用json.loads(str(event["body"])),直接使用event["body"]即可。
  • 是否存在特殊字符:Base64字符串中是否包含=、+、/之外的字符?这些是Base64标准字符,不会导致JSON解析错误,但如果有其他字符,可能是编码过程中引入的,需要清理。

内容的提问来源于stack exchange,提问作者Paulo Patto

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 21:25:16