微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

从 aws lambda 函数返回图像

如何解决从 aws lambda 函数返回图像

大家好,我正在尝试将图像作为来自 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;

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

enter image description here

解决方法

一种解决方案(我使用的)是返回图像的 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网关

,

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

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

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

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。