首页 文章

通过API网关从AWS lambda返回二进制正文和http标头

提问于
浏览
2

我有一个lambda需要通过api网关(使用lambda集成)返回二进制对象和一些http标头(例如内容类型)或重定向到另一个URL . 在二进制支持示例(例如https://aws.amazon.com/blogs/compute/binary-support-for-api-integrations-with-amazon-api-gateway/)中,lambda仅返回二进制对象(图像)的(base64) . 在我的情况下,我还需要返回状态代码和http标头(或等效的东西) . 我很难在api网关中使用二进制支持来完成这项工作 .

lambda在这个表单上返回一个json:

{
  "statusCode": 200,
  "headers": {
    "content-type": "image/jpeg"
  },
  "body": "/9j/4AAQS...gLDAoKCAwZK",
  "isBase64Encoded": true
}

在积分响应中,我为表单的image / jpeg(等)添加了body映射:

$input.json('$.body')

和'内容类型'的 Headers 映射如下:

integration.response.body.headers['content-type']

我已经尝试了上述的许多变化,但结果是一致的

Execution failed due to configuration error: Unable to transform response

如何将json从lambda转换为可以通过api网关转换为二进制的形式,使用http标头和所有?我可以从api网关获得更多的调试日志记录,以显示更具体的不满意的内容吗?

有没有办法从api网关获得更多的调试日志?

3 回答

  • 0

    我最近在遇到类似的问题后得到了这个工作 .

    就我而言,我错过了两件事:

    首先,我需要更改AWS将在“Accept” Headers 中发送到上游的类型列表“

    "x-amazon-apigateway-binary-media-types" : [
      "image/jpeg"
    ]
    

    其次,我需要将Integration Response设置为“Convert to binary(如果需要)”:

    "contentHandling": "CONVERT_TO_BINARY"
    

    有关详细信息,请参阅this answer和示例配置 .

    我还发现我没有足够的耐心 . 每当我部署API时,我都会立即进行检查,而不是等待几分钟才能传播更改 .

  • 1

    我厌倦了使用base64编码返回二进制数据,但我无法通过API网关从Lambda函数返回它 .

    因此,我决定重定向URL . 我将方法响应更改为302并添加了"Location"响应标头 . 我还从Integration Response中删除了响应代码200,选择302作为响应代码并使用 Location header映射 integration.response.body.location 值 . 我的Lambda代码以此格式返回重定向URL的位置:

    {"location":"www.google.com/"}
    

    希望这可以帮助 .

  • -1

    我发现任何文件要备份,这是可能的,而我发现这个https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-payload-encodings-workflow.html

    将文本有效内容转换为二进制blob时,API Gateway假定> text数据是Base64编码的字符串,并将二进制数据输出为Base64解码的blob . 如果转换失败,则返回500响应,指示API配置错误 . 尽管您必须在API上启用直通行为,但您没有为此类转换提供映射模板 . 将二进制有效负载转换为文本字符串时,API网关始终对二进制数据应用> Base64编码 . 您可以为此类有效内容定义映射模板,但只能通过$ input.body访问映射模板中的Base64编码字符串,如以下示例>映射模板的摘录所示 .

    这听起来像这样的映射只能是相反的方式;我最终做的是只返回Base64Encoded二进制字符串并在头映射中硬编码内容类型和缓存控制;完整实现请参阅我的博客文章https://mesfinmoges.com/dynamic-image-resizing-using-amazon-s3-aws-lambda-mazon-api-gateway-amazon-cloudfront/

相关问题