Aws lambda Sam在本地调用时未编码请求正文

Aws lambda Sam在本地调用时未编码请求正文,aws-lambda,aws-api-gateway,aws-sam,Aws Lambda,Aws Api Gateway,Aws Sam,调用sam local start api并发送多部分请求时,未对事件体进行编码,但正在云中对其进行编码。所以,我希望在我当地的环境中也有同样的行为 重现问题的步骤: 创建由sam init提供的Hello World项目 添加一个post方法 返回处理程序中编码的ISBase64 执行HTTP请求: 答案总是一样的: 我尝试过使用代理集成,但没有成功 我的解决方法是在处理程序中设置如下内容: const csvString = event.isBase64Encoded ? Buffer.fr

调用
sam local start api
并发送多部分请求时,未对事件体进行编码,但正在云中对其进行编码。所以,我希望在我当地的环境中也有同样的行为

重现问题的步骤:

  • 创建由sam init提供的Hello World项目
  • 添加一个post方法
  • 返回处理程序中编码的ISBase64
  • 执行HTTP请求:
  • 答案总是一样的:
  • 我尝试过使用代理集成,但没有成功

    我的解决方法是在处理程序中设置如下内容:

    const csvString = event.isBase64Encoded ? Buffer.from(event.body, 'base64').toString('utf-8') : event.body;
    

    您的
    lambdaHandler
    被硬编码为返回
    {“message”:false}
    。如果希望其不同,请修改代码。否则,函数将返回
    消息:event.isBase64Encoded
    。否。如果您不相信,请尝试在console.log中运行
    JSON.stringify({message:event.isBase64Encoded})
    exports.lambdaHandler = async (event, context) => {
        try {
            // const ret = await axios(url);
            response = {
                'statusCode': 200,
                'body': JSON.stringify({
                    message: event.isBase64Encoded,
                    // location: ret.data.trim()
                })
            }
        } catch (err) {
            console.log(err);
            return err;
        }
    
        return response
    };
    
    curl --location --request POST 'http://127.0.0.1:3000/hello' \
    --header 'saa: csv/csv-file' \
    --form 'foo=@/home/user/csv-file.csv'
    
    {
        "message": false
    }
    
    const csvString = event.isBase64Encoded ? Buffer.from(event.body, 'base64').toString('utf-8') : event.body;