0

我試圖從我的AWS Lambda獲得1 * 1像素的響應。如何返回1 * 1像素作爲AWS Lambda的響應?

碼是這樣的:

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

和我API網關映射響應頭。 但它沒有給出1 * 1像素作爲響應。

+0

也許使用重定向? – kixorz

回答

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"> 
0

在合併響應,更換圖像/ PNG的默認應用程序/ JSON內容類型和映射模板設置爲:

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

使用捲曲-vvv https://yourendpoint.com/resource看到返回了哪些頭。

+0

是否爲您解決這個問題? –

+0

我已經嘗試了以上修復。但我沒有得到所需的像素作爲響應。 –

+0

捲曲返回什麼? – hellomichibye

0

API網關目前不支持二進制數據。在從Lambda返回圖像之前,您必須對圖像進行base64編碼,然後在客戶端對其進行解碼。一個例子是here

Ritisha。

+0

非常翔實。但在這種情況下,我不使用JavaScript。所以我以另一種方式找到了解決方案。請參閱http://stackoverflow.com/a/38911642/4639822 –