【问题标题】:Return image from aws lambda function从 aws lambda 函数返回图像
【发布时间】:2021-08-24 19:10:37
【问题描述】:

大家好,我正在尝试将图像作为来自 aws lambda/api-gateway 的 http 响应返回。出于某种原因,我的回复以空图像结束。 这是我在 aws lambda 上的内容:

"use strict";

var handler = function (event, context, callback) {
const base64Image = "iVBORw0KGgoAAAANSUhEUgAAAKAAAACgCAAAAACupDjxAAAFPklEQVR42u2ZvWsqTRSH7//0g0UEYQmIIIIEBAtBEAIWFhaBgBCwsBBuEQtBEEHSWKSwCFhYSJoUKQIXLgRsLERSCBYSJFgsct7CndmP2RGi7np5OdtlTtw8mY/nnDn+on/8+cWADMiADMiADMiADMiADMiADMiADMiADMiADMiADMiADMiADMiADMiADMiADMiADMiA/0vAm6tMrliu1hoPncdBv9tq3FVKuXTSTC1pmzaT2WK11mj1Br12s35bKeWzydQnWdmYmc6X7xrtbrfdrFUKaTNWIJoY8atssVp/6PQ6rXq1mDFjudMBU9A8f2hjBAbeaBEwmifqqaPXpwN+NPMBHGa59U30Uksrf/G2vaHd433BMxovtaZEn+27jHvUKDzMz7IHN5NrL0V6aInYvOIO3M3kh2a3cjQzkr++G8t/yehszndIrEHchZFZu2NDF597fCfQ25Z7eBqzl3x+3lP87iL86w21ZeDF+5H9YNf3pvp+EVbn1syzxEjsfNObE5Gxd2cAAG79LxrYJ+nsHpR7SlHDm4j89gwvASD55f/tIQDUQxD1IiaOpOUPid12tXWPvqqrLnZEfBlGJvktJmqiqEhERu7RGoBqgPmVqT4X4KfwYYV0U5h3ja0MwFCP6toAjM9wcnFNTJTyZ99F5NUZawXP1ABALaRi4a/AaCqhoh0pOhMYBxJr9SXXqqfOV82I/JVQcsBEsL+7d2xHfcUbgEJo5ZZ04cAf2YlkWBaOiQHmJlhWo9AAt6aNkd0F2g0APvY/NwD01TcsDSBphVewtgIOg82etCP7zLEwgNSWAiXYCbGiPmCavmCfERHdA3gKKDqSgLEKEZCqWtN8JezIPRHNDCATsJJjOx4e4JveNA+izvvUH4WSs0nDujRda02zNCT7FEBup3546jFlOIADrWnsQg+IrSpBCds+2qOQATcJrWlmgr2skfEm/kPHHHUvbmpN45wgTUE6CKivzw8o50k1zR+H70azf3/mmOM6C2WtaWTJAPzRGOCewgec6E0jQ2XdneEjAkArrTWNLBnSVnAaLlIEgE5SU00zDKz9909HufaFBbiOaU0jSwZV01YSSFmRANK93jR97cVqDKAXUX/wQ28aGSoEXOZiq4gAHZ0oprnTmXr2k9v6yYAjnWlmjqrLahqeRga4vdKY5haaFtMmAZQoMkCnoTVQdqBc/qo/DY8jBJS1n9c0FcBYVDy1v/3kjnLM8YDOWr76LvZNp8tQ83YeehQl4HuQacpAfOWccWPhPtyxdaSAlFNN8w6g7S4ZGu4+Up2iBXxSTXMDmF9EtMvK2t+VhqcRA34n/KZ5A/DoLRke7DSc0lSwYQI67cyBk17sXoIsGezu1lhzhwoXcA6vaV4ADP0lQ1esfdqKHFB2VW3T5IFry99lML/t/Nen6AFfPKaZeJax5V7/JhBfXwBwl3GZZpfzVFgy06Qs2iSOdsxpgPTo+npk5CuwRJcBQ3o63jEnAq7j0jRW1ldfybora+WOd8yJgM40DZ6VG6XsMjROcMypgFM5TRnfN52eLsPxjjkVkEquL6fn+lifLgU4diAaWgud4JiTAa2khFjq650GXQyQOgKipcaegyrrqAFXtpDNgFW0UgcaSVEBintw/4DIXy4KuLdJchsU25gAkN5dFJDyCP7KRl5OH+mygEMAWY2IVzEg/nVhwK154EbeONEx5wCk7oFSYGHG5xcHpOWBU/C9ocsDhvswIAMyIAMyIAMyIAMyIAMyIAMyIAMyIAMyIAMyIAMyIAMyIAMy4D/6/AdhR419vDNESgAAAABJRU5ErkJggg==";
const image = Buffer.from(base64Image, 'base64');

    var response = {
        statusCode: 200,
        headers: {
            "Content-Type": "image/jpeg"
        },
        isBase64Encoded: true,
        body: image.toString('base64')
    };
    callback(null, response);
};
exports.handler = handler;

我还设置了二进制媒体类型 到 / 关于如何使它工作的任何想法? 这也是我之后的结果

【问题讨论】:

    标签: amazon-web-services aws-lambda aws-api-gateway aws-lambda-edge


    【解决方案1】:

    一种解决方案(我使用的)是返回图像的 base64 字符串,然后在 API Gateway 上将 base64 字符串转换为二进制。

    aws apigateway update-integration-response \ 
     — rest-api-id <xxx> \
     — resource-id <xxx> \ 
     — http-method GET \ 
     — status-code 200 \ 
     — patch-operations ‘[{“op” : “replace”, “path” : “/contentHandling”, “value” : “CONVERT_TO_BINARY”}]’
    

    稍后,您必须在 API Gateway 的 Settings 选项下添加 */* 作为二进制媒体类型。 来自 cli:

    aws apigateway update-rest-api — rest-api-id XXX — patch-operations ‘[{“op” : “replace”, “path” : “/binaryMediaTypes/*~1*”, “value” : “*~1*”}]’
    

    注意:您应该重新部署 api 网关

    【讨论】:

      【解决方案2】:

      如果您在 API 网关上使用 Lambda 代理集成,请尝试以下步骤。

      1. 在 AWS API 网关 > 模型 > 使用 ImageJPEG 和 {} 作为模型架构创建模型名称。

      2. 在 API 网关 > 资源 > 您的 GET 端点 > 单击“方法响应”。 为 200 创建新的响应状态。 在“200 的响应标头”下添加新标头“Content-Type”。 添加 'Response Body for 200' 作为 'image/jpeg' 并选择 ImageJPEG 作为您之前创建的模态。

      3. 在 API 网关 > 设置 > '二进制媒体类型'下。

      添加 'image/jpeg' 和 'text/html' 作为支持的二进制类型。如果您通过浏览器直接访问,则需要“text/html”。 (否则,如果您将“Accept”标头发送为“image/jpeg”,它应该可以工作)。如果这不起作用,请将 */* 添加为二进制媒体类型以允许所有类型。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-09-03
        • 2022-10-14
        • 2016-08-15
        • 2021-09-26
        • 2021-12-13
        相关资源
        最近更新 更多