如何在 Node.js 中使用带有 API 网关的 AWS Lambda 发送二进制响应? [复制]

Posted

技术标签:

【中文标题】如何在 Node.js 中使用带有 API 网关的 AWS Lambda 发送二进制响应? [复制]【英文标题】:How do I send a binary response with AWS Lambda with API Gateway in Node.js? [duplicate] 【发布时间】:2017-05-20 16:04:32 【问题描述】:

我正在尝试设置一个 Lambda 和 API 网关,它将执行 s3.getObject() 并将二进制图像作为响应输出。最终,我想从 s3 中提取图像并即时调整大小,而不是将它们保存回 s3,但是我似乎连一张简单的图像都无法输出。

我的简单 lambda 看起来像这样:

'use strict';

const http = require('http');    

exports.handler = (event, context, callback) => 
    http.get('http://i.stack.imgur.com/PIFN0.jpg', function(res) 
        var body = '';
        res.on('data', function(chunk) 
            // Agregates chunks
            body += chunk;
        );
        res.on('end', function() 
            callback(null, body);
        );
    );    
;

我已将 API Gateway 二进制支持设置为允许“image/jpeg”,并尝试在方法响应和集成响应中设置内容类型。

方法响应:

集成响应:

【问题讨论】:

【参考方案1】:

我在这里找到了答案:AWS Gateway API base64Decode produces garbled binary?

当您在“创建方法”屏幕上选择 Lambda 函数时,它需要 CLI 命令来更改未在 AWS 控制台中公开的设置。

【讨论】:

【参考方案2】:

你读过这个blog post吗?

请按照这些说明操作并确保您的客户端正确发送 Content-Type 和 Accept 标头

【讨论】:

该博客文章示例用于二进制上传,我已成功完成,但我无法通过 Lamba 显示二进制图像。还有这篇文章,但它不使用 lambda。 docs.aws.amazon.com/apigateway/latest/developerguide/… 博客文章演示了来自 API Gateway/Lambda 的缩略图的二进制响应,我认为这与您尝试做的非常相似。

以上是关于如何在 Node.js 中使用带有 API 网关的 AWS Lambda 发送二进制响应? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

node.js 的 API 网关示例

Node.js API 网关和 nginx 作为反向代理

使用 Node.js 构建 API 网关

带有 Node JS 和 Sails JS 的 Facebook Graph API

带有 Express 异步 API 调用的 Node.JS

为 Java、Python、Ruby、Node.JS 和 PHP 开放支付网关库