我需要实现一个AWS后端API,允许我的移动应用的用户在Amazon S3中上传文件(图像)。 创建直接与Amazon S3接口的API不是一种选择,因为我无法将上传的文件与DynamoDB上的用户记录相关联。 我曾想过创建一个由API触发的Lambda函数(Java),它执行以下步骤: 1)调用Amazon S3功能上传文件 2)使用文件的引用将记录写入我的Dynamo DB 有没有办法在我的Lambda函数的输入中提供二进制文件作为API公开?
请告诉我。谢谢!
的Davide
答案 0 :(得分:3)
执行此操作的最佳方法是使用presigned URLs。您可以生成一个URL,让用户将文件直接上传到具有特定名称和类型的S3。这样您就不必担心大文件会降低服务器速度,lambda限制或带宽双倍费用。在大多数情况下,它对用户来说也更快,并支持S3 transfer acceleration。
该过程可能类似于:
要回答你的实际问题,是的,有一种方法pass binary data to Lambda functions。该链接是一个循序渐进的教程,但基本上在API网关中,您必须将“请求正文直通”设置为“当没有定义模板(推荐)时”并填写您期望的内容类型。您的映射应包含"base64data": "$input.body"
,您需要在“二进制支持”下设置类型。在您的实际lambda函数中,您应该可以访问数据"base64data"
。