2016-05-17 80 views
1

我有一個要求,從亞馬遜Lambda Java功能返回一個PNG到亞馬遜Rest API。我用這樣的函數原型構建了函數:亞馬遜Lambda Java函數返回png到API網關

public static void generatePng(InputStream request, OutputStream response, Context context) 

InputStream請求詳細說明了需要寫入映像的信息。 OutputStream響應是發回的內容,是一個PNG圖像。我測試了這些代碼,並知道編碼到輸出流中的圖像是正確的,因爲我的測試將其寫入了一個文件,我可以在圖像編輯器中看到它。

我遇到的問題是從Lambda函數到API網關的響應接線。這些文檔專門討論String響應,但我的響應負載是二進制圖像數據。

在lambda集成響應我曾嘗試添加的報頭映射:

的Content-Length integration.response.header.Content - 長度
內容類型integration.response.header.Content型

以及一個身體映射: content-type:image/png with an template of $ input.body

我還在方法響應部分添加了image/png響應模型。

在測試API,API調用的響應不顯示圖像雖然, 而是像一串轉儲開始用正確的PNG頭:

如:響應體

?PNG 


IHDR? 
??~LIDATx? ...  

的響應頭做顯示: {「內容類型」:「圖像/ PNG」}

有誰知道如何配置亞馬遜API網關接受的圖像作爲lambda函數調用的輸出並正確地將其返回給調用者?

+2

API網關目前不支持二進制數據:https://forums.aws.amazon.com/thread.jspa?threadID=195218 –

+0

最後,我Base64編碼的圖像,並回答了JSon有效載荷的PNG作爲base64編碼圖像。 – theINtoy

+0

你也可以做的是將生成的PNG上傳到S3,並讓你的lambda通過API網關返回302重定向到圖像。解決了類似的問題。 – Theodor

回答