AWS API用于在S3中上载文件并在DB中写入记录

时间:2017-11-07 22:43:37

标签: java amazon-web-services amazon-s3 lambda

我需要实现一个AWS后端API,允许我的移动应用的用户在Amazon S3中上传文件(图像)。 创建直接与Amazon S3接口的API不是一种选择,因为我无法将上传的文件与DynamoDB上的用户记录相关联。 我曾想过创建一个由API触发的Lambda函数(Java),它执行以下步骤: 1)调用Amazon S3功能上传文件 2)使用文件的引用将记录写入我的Dynamo DB 有没有办法在我的Lambda函数的输入中提供二进制文件作为API公开?

请告诉我。谢谢!

的Davide

1 个答案:

答案 0 :(得分:3)

执行此操作的最佳方法是使用presigned URLs。您可以生成一个URL,让用户将文件直接上传到具有特定名称和类型的S3。这样您就不必担心大文件会降低服务器速度,lambda限制或带宽双倍费用。在大多数情况下,它对用户来说也更快,并支持S3 transfer acceleration

该过程可能类似于:

  1. 用户请求从您的服务器链接
  2. 您的服务器在DynamoDB中写入一个条目并返回一个预先签名的URL
  3. 用户使用预先签名的URL(具有服务器选择的确切名称)直接将文件上传到S3
  4. 上传完成后,您可以使用Lambda收到通知,或者让用户告诉您的服务器上传已完成
  5. 您的服务器执行任何所需的后处理并将文件标记为就绪
  6. 要回答你的实际问题,是的,有一种方法pass binary data to Lambda functions。该链接是一个循序渐进的教程,但基本上在API网关中,您必须将“请求正文直通”设置为“当没有定义模板(推荐)时”并填写您期望的内容类型。您的映射应包含"base64data": "$input.body",您需要在“二进制支持”下设置类型。在您的实际lambda函数中,您应该可以访问数据"base64data"