gpt4 book ai didi

aws-lambda - 如何使用无服务器框架从节点 JS AWS lambda 后端将二进制内容传递到 API Gateway?

转载 作者:行者123 更新时间:2023-12-04 01:12:22 27 4
gpt4 key购买 nike

众所周知,API Gateway 和 lambda 支持二进制请求/响应,但我有一个关于节点 JavaScript 中的后端编程的问题。

环境:

  • 使用无服务器框架,与 lambda(不是 lambda-proxy)集成。
  • 响应头映射为:
    内容类型:integration.response.body.headers.Content-Type
  • 响应模板映射是:
    图片/png:$input.path('$.body')
    图片/jpeg: $input.path('$.body')
  • 启用对 image/png 和 image/jpeg 的二进制支持

  • 在上述环境中,在我的代码中,我的响应内容为二进制(缓冲区对象数组)。
    但是,如果我直接将 Buffer 对象数组作为响应,
    callback(null,{
    headers: {'Content-Type': 'image/jpeg'},
    body: body
    });

    接收响应是这样的:
    Content-type: image/jpeg
    {type=Buffer, data=[255,216,255,224,0,16,74,70,73,70,0...

    如果我通过 base64 编码将 Buffer 对象数组作为响应,
    callback(null,{
    headers: {'Content-Type': 'image/jpeg'},
    body: body.toString('base64')
    });

    接收响应是这样的:
    Content-type: image/jpeg
    /9j/4AAQSkZJRgABAQEASABIAAD/2wBDA...

    如何使用无服务器框架从节点 JS 后端向 API Gateway 提供二进制响应?

    == 后记 ==

    根据这份文件:
    AWS API Gateway Binary output without Accept header
    我们必须将集成响应更改的“内容处理”设置为“转换为二进制”,以响应二进制响应。
    但是我该如何设置呢?
    我不知道 serverless.yml 和 AWS 控制台 GUI。

    如果我成功设置了这个内容处理 => 转换为二进制,我可以解决响应二进制响应吗?

    == 1 月 17 日编辑 ==

    嗨@ka-hou-ieong

    你写了rest-api-id和resource-id,它们在下面的图片中,对吧?

    enter image description here

    但是使用这些 id,命令结果说:
    $aws apigateway put-integration-response --rest-api-id XXXXXXXX --resource-id XXXXXX --http-method GET --status-code 200 --content-handling CONVERT_TO_BINARY

    An error occurred (NotFoundException) when calling the PutIntegrationResponse operation: Invalid Resource identifier specified

    这有什么问题?我使用最新的 aws-cli (aws-cli/1.11.37 Python/2.7.9 Darwin/16.3.0 botocore/1.5.0)

    最佳答案

    如果您想将响应强制为二进制响应,您可以通过 AWS CLI 或 API 将“CONVERT_TO_BINARY”设置为集成响应上的 contentHandling。目前,我们在控制台上缺少此选项。
    API

    PATCH /restapis/<restapi_id>/resources/<resource_id>/methods/<http_method>/integration/responses/<status_code>

    {
    "patchOperations" : [ {
    "op" : "replace",
    "path" : "/contentEncoding",
    "value" : "CONVERT_TO_BINARY"
    }]
    }
    命令行界面
    aws apigateway put-integration-response --rest-api-id xxxxxxx --resource-id xxxxx --http-method GET --status-code 200 --content-handling CONVERT_TO_BINARY

    关于aws-lambda - 如何使用无服务器框架从节点 JS AWS lambda 后端将二进制内容传递到 API Gateway?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41657302/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com