Aws lambda 使用网关API将图像上载到Lambda

Aws lambda 使用网关API将图像上载到Lambda,aws-lambda,aws-api-gateway,Aws Lambda,Aws Api Gateway,我试图让用户上传图片到lambda函数进行处理;使用网关API接口 我试图为我的POST方法指定一个模型,但到目前为止我一直得到错误 指定的模型无效:验证结果:警告:[],错误:[指定的模型架构无效] 。。。没什么帮助 我知道我不能直接将原始数据发送到lambda,必须在两者之间使用某种格式 我所理解的是,我可以让网关接口base64为我编码数据 我试图通过使用以下模型模式和内容类型image/jpeg来实现这一点 { "body" : $util.base64Encode($input

我试图让用户上传图片到lambda函数进行处理;使用网关API接口

我试图为我的POST方法指定一个模型,但到目前为止我一直得到错误

指定的模型无效:验证结果:警告:[],错误:[指定的模型架构无效]

。。。没什么帮助

我知道我不能直接将原始数据发送到lambda,必须在两者之间使用某种格式

我所理解的是,我可以让网关接口base64为我编码数据

我试图通过使用以下模型模式和内容类型image/jpeg来实现这一点

{
    "body" : $util.base64Encode($input.body)
}

如何发送图像

正如您所看到的,API网关中没有对二进制数据的本机支持。我们正在做这件事,但我没有你的预计到达时间。一些客户已经成功地对数据进行了base64编码,就像您在问题中所做的那样,只是它应该位于集成请求中的映射模板中,而不是方法请求中的映射模板中

如果将内容类型设置为image/jpeg,则仅当传入请求上的内容类型标题也是image/jpeg时,编码才会应用,因此请确保将其设置为image/jpeg

您还可以通过将“请求正文传递”(API中的传递行为)设置为建议值(“当未定义模板时”或“当API中没有模板时”)来拒绝对不发送正确内容类型的方法的传入请求


用于传递行为的文档->

由于使用二进制数据和API网关似乎很复杂,我认为您应该:

  • 使用上载图像
  • 为上传图像的bucket的PUT上的lambda函数设置触发器

  • 更好的解决方案是在S3中上传图片,然后使用Lambda进行处理。似乎需要在上传之前使用s3或执行base64。Base64消耗更多的带宽,s3迫使我们执行额外的请求…将
    $util.base64Encode($input.body)
    括在引号中可以解决这个问题:
    “body”:“$util.base64Encode($input.body)”
    。然而,编码后的数据已损坏且无用。我能够对png图像进行base64编码并将其发送给lambda。然后Lambda对其进行解码,并将图像存储在s3中的某个位置。但这种形象是腐败的。换句话说,
    base64Encode
    对于二进制数据不能正常工作。不确定您的一些客户如何成功地对数据进行base64编码。。。