使用网关 API 将图像上传到 Lambda

Upload image to Lambda using gateway API

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

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

Invalid model specified: Validation Result: warnings : [], errors : [Invalid model schema specified]

... 帮助不大。

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

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

我尝试通过使用以下内容类型为 image/jpeg

的模型架构来做到这一点
{
    "body" : $util.base64Encode($input.body)
}

如何发送图片?

如您所见,API 网关不支持二进制数据。我们正在努力解决这个问题,但我没有适合您的预计到达时间。一些客户已经成功地对数据进行了 base64 编码,就像您在问题中遇到的那样,只是它应该在集成请求中的映射模板中 而不是 方法请求。

如果您将内容类型设置为 image/jpeg,则仅当传入请求的 Content-Type header 也是 image/jpeg 时才应用编码,因此一定要设置它。

您还可以通过设置 'Request body passthrough'(API ) 到建议值("when there are no templates defined" 或 'WHEN_NO_TEMPLATES' 中的 API)

传递行为的文档 -> https://docs.aws.amazon.com/apigateway/api-reference/resource/integration/#passthroughBehavior

因为它看起来像是在处理二进制数据,而且 API 网关很复杂,我认为你应该:

  1. 使用 API Gateway as an S3 proxy
  2. 上传图片
  3. 为您上传图片的存储桶的 PUT 上的 lambda 函数设置触发器