如何返回1 * 1像素作为AWS Lambda的响应?

时间:2016-08-10 09:17:21

标签: node.js amazon-web-services lambda aws-lambda aws-api-gateway

我正在尝试从我的 AWS Lambda 获得1 * 1像素作为响应。

代码是这样的:

var imgHex = '47494638396101000100800000dbdfef00000021f90401000000002c00000000010001000002024401003b';
var imgBuffer = new Buffer(imgHex, 'hex');
context.succeed({header:"image/png",data:img}); 

我在 API网关中映射了响应标头。 但它没有给出1 * 1像素作为响应。

3 个答案:

答案 0 :(得分:0)

在Integration Response中,将默认的application / json内容类型替换为image / png,并将映射模板设置为:

#set($result = $input.path('$'))
$result.data

使用curl -vvv https://yourendpoint.com/resource查看返回的标头。

答案 1 :(得分:0)

终于得到了理想的结果。

  • 使用转义的十六进制代替将base64字符串转换为十六进制 表示 1px * 1px 图像。即添加" \ x "每个十六进制字符。
  • AWS Gateway目前不支持二进制数据,因此会添加 发送数据的额外字符。见this。因此,您可能无法满足每张图片的需求。
  • 这里我使用了 bmp 格式的图片。并获得1 * 1像素图像 输出。
    不要忘记在集成响应中设置 Content-Type 标头。

    代码:



exports.handler = function(event, context) {
    var imageHex = "\x42\x4d\x3c\x00\x00\x00\x00\x00\x00\x00\x36\x00\x00\x00\x28\x00"+ 
                   "\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x01\x00\x18\x00\x00\x00"+   
                   "\x00\x00\x06\x00\x00\x00\x27\x00\x00\x00\x27\x00\x00\x00\x00\x00"+
                   "\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00";  

    context.succeed({responce:imageHex,header:"image/bmp"});
};




注意:
如果您正在使用新项目而您只想获得lambda函数,那么还有一个技巧。您可以将任何格式的图像(如png,bmp,gif等)作为转义的十六进制字符串。唯一的问题是aws网关修改你的字符串,有时你会得到这个图像
 enter image description here
因此,只需使用 display:none CSS隐藏您的图片。

<img style="display:none" src ="http://path_to_your_code">

答案 2 :(得分:-1)

API Gateway目前不支持二进制数据。在从Lambda返回图像之前,您必须对图像进行base64编码,然后在客户端对其进行解码。有一个例子here

Ritisha。