AWS API在S3中上传文件并在DB中写入记录



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

请告诉我。非常感谢。

戴维斯

最好的方法是使用预签名的URL。您可以生成一个URL,让用户直接将具有特定名称和类型的文件上传到S3。这样,您就不必担心大文件会减慢服务器速度、lambda限制或带宽翻倍。在大多数情况下,它对用户来说也更快,并支持S3传输加速。

这个过程可能看起来像:

  1. 用户从服务器请求链接
  2. 您的服务器在DynamoDB中写入一个条目并返回一个预先签名的URL
  3. 用户使用预先签名的URL(使用您选择的服务器的确切名称)将文件直接上传到S3
  4. 上传完成后,您要么使用Lambda收到通知,要么让用户告诉您的服务器上传完成
  5. 服务器执行任何所需的后处理并将文件标记为就绪

为了回答您的实际问题,是的,有一种方法可以将二进制数据传递给Lambda函数。该链接是一个循序渐进的教程,但基本上在API网关中,您必须将"请求主体传递"设置为"当没有定义(推荐)模板时",并填写您期望的内容类型。您的映射应该包括"base64data": "$input.body",并且您需要在"二进制支持"下设置您的类型。在实际的lambda函数中,您应该可以以"base64data"的形式访问数据。

最新更新