2016-05-07 74 views
8

我有一個REST API與API gatewayLambda。 我不想創建一個端點來上傳配置文件圖片,該文件將文件傳遞給Lambda函數,在該函數中調整大小,將其註冊到數據庫並返回新圖像的url路徑。通過亞馬遜API網關和lambda上傳圖片

這些服務有沒有辦法這樣做? 在線找不到任何東西(我發現的唯一建議是直接上傳到S3,這需要IAM權限,並且有觸發Lambda函數的事件來調整圖片大小)。

感謝

UPDATE

AWS更新APIGATEWAY要知道,你可以send binaries through an endpoint
感謝@blue和@Manzo意見徵求其

+2

API網關現在支持二進制數據... – Manzo

+1

是的,這裏的示例:https://aws.amazon.com/blogs/compute/binary-support-for-api-integrations-with-amazon-api-gateway/ – balu

回答

3

上傳文件直接S3不一定需要IAM權限。您將創建一個返回pre-signed S3 URL的API端點,然後可以使用該端點將文件直接上載到S3。 API端點後面的Lambda函數將是唯一需要S3存儲桶的正確IAM權限的東西。

+6

你是對的,但我有我自己的lambda函數來授權用戶,並根據他的id將文件保存到s3存儲桶。我不認爲讓用戶獲得s3 url然後上傳文件是一個好主意,API的要點是抽象邏輯和基礎設施,用戶不應該處理所有這些事情,甚至不知道我們使用s3或aws –

1

由於API網關和Lambda目前不支持本地,因此您可以將文件傳遞到base64編碼爲API網關的圖片,然後傳遞到Lambda函數。您的Lambda函數可以基於64解碼,然後調整大小,將其註冊到數據庫並返回新圖像的url路徑。

+0

謝謝。我試着說你的話。我得到'無法將請求正文解析爲json:無法識別的令牌。我的'請求temaplate'有一個prop:'payload:$ input.body'。它應該以字符串形式返回主體(文件),但是會引發錯誤。 –

+0

修正了它!添加'$ util.base64Encode()'。這個道具看起來像這樣:'「payload」:「$ util.base64Encode($ input.body)」'。 –

+0

現在我得到一個損壞的文件。它在'application/octet-stream'上,我無法操作或確定圖像類型。任何解決方案? –