node.js – 从AWS Lambda函数中的S3获取对象并发送到Api Gateway

我想从一个桶中获取一个.jpg文件并将其发送回api网关.我相信我的设置正确,因为我看到记录的东西.它从s3中抓取文件很好,而gm是graphicsmagick库.不知道我是否正在使用它.

在lambda函数中我这样做(很多代码来自aws示例):

async.waterfall([
    function download(next) {
        console.log(srcKey);
        console.log(srcBucket);
        // Download the image from S3 into a buffer.
        s3.getobject({
                Bucket: srcBucket,Key: srcKey
            },next);
        },function transform(response,next) {
        console.log(response);
        next(null,'image/jpeg',gm(response.Body).quality(85));

    },function sendData(contentType,data,next){
        console.log(contentType);
        console.log(data);
        imageBuffer = data.sourceBuffer;
        context.succeed(imageBuffer);
    }
    ]
);

响应头的内容长度为:85948,这似乎不对,因为原始文件只有36kb.谁知道我做错了什么?

解决方法

您可以实现获取图像< - > API网关< - > Lambda< - > S3轻松集成.

在lambda中,而不是json,返回image的base64字符串表示形式(buffer.toString(‘base64’)),强制API网关将字符串转换为二进制并添加特定的Content-Type(因此您不需要使用它们的有限二进制支持,强制您发送特定的Accept标头).

在AWS控制台中,转到API Gateway,然后转到相关方法并更新设置:

>集成请求

>取消选中:使用Lambda Proxy集成

>方法响应

>添加回复 – > HTTP状态:200
>添加标题内容类型

>整合响应 – >标题映射 – >响应标头 – >内容类型

>映射值:’image / jpeg'(单引号)

从命令行,运行以下命令强制将字符串转换为二进制.
首先,从API网关检索rest-api-id和resource-id.
然后,在CLI中运行(用您自己的替换rest-api-id和resource-id):

aws apigateway put-integration-response --rest-api-id <rest-api-id> --resource-id <resource-id> --http-method GET --status-code 200 --content-handling CONVERT_TO_BINARY

相关文章

这篇文章主要介绍“基于nodejs的ssh2怎么实现自动化部署”的...
本文小编为大家详细介绍“nodejs怎么实现目录不存在自动创建...
这篇“如何把nodejs数据传到前端”文章的知识点大部分人都不...
本文小编为大家详细介绍“nodejs如何实现定时删除文件”,内...
这篇文章主要讲解了“nodejs安装模块卡住不动怎么解决”,文...
今天小编给大家分享一下如何检测nodejs有没有安装成功的相关...