【问题标题】:Uploading an image through Amazon API gateway and lambda通过 Amazon API 网关和 lambda 上传图像
【发布时间】:2016-09-02 13:40:27
【问题描述】:

我有一个带有 API gatewayLambda 的 REST API。 我不想创建一个用于上传个人资料图片的端点,它将文件传递给 Lambda 函数,在该函数中调整大小,将其注册到数据库并返回新图片的 url 路径。

这些服务有什么办法吗? 在网上找不到任何东西(我发现的唯一建议是直接上传到 S3,这需要 IAM 权限,并且有一个事件触发了调整图片大小的 Lambda 函数)。

谢谢

更新

AWS 更新了 APIGATEWAY 并且知道你可以send binaries through an endpoint
感谢@blue 和@Manzo 发表评论

【问题讨论】:

标签: file-upload amazon-s3 aws-lambda aws-api-gateway


【解决方案1】:

将文件直接上传到 S3 不一定需要 IAM 权限。您将创建一个返回 pre-signed S3 URL 的 API 端点,然后可以使用该端点将文件直接上传到 S3。 API 端点后面的 Lambda 函数将是唯一需要 S3 存储桶的正确 IAM 权限的东西。

【讨论】:

  • 你是对的,但是我有自己的 lambda 函数来授权用户,并根据他的 id 将文件保存到 s3 存储桶。我不认为让用户获取 s3 url 然后上传文件是一个好主意,API 的目的是抽象逻辑和基础设施,用户不应该处理所有这些事情甚至知道我们使用 s3或 aws
【解决方案2】:

由于 API Gateway 和 Lambda 目前不原生支持,您可以将文件传递给基于 64 编码的图片到 API Gateway,然后传递给 Lambda 函数。您的 Lambda 函数可以基于 64 位解码,然后调整大小,将其注册到数据库并返回新图像的 url 路径。

【讨论】:

  • 谢谢。我试过你说的。我收到Could not parse request body into json: Unrecognized token。我的request temaplate 有一个道具:payload: $input.body。它应该将正文(文件)作为字符串返回,但会引发错误。
  • 修复了!添加$util.base64Encode()。道具看起来像这样:"payload": "$util.base64Encode($input.body)".
  • 现在我得到一个损坏的文件。它位于application/octet-stream,我无法操作或确定图像类型。有什么解决办法吗?
  • @JoJoB。您是否能够解决问题。我遇到了同样的问题。
  • @advncd 我使用了下面的建议。我有一个端点,它为我提供了一个到 s3 存储桶的签名 url,然后我直接上传它。您可以使用此标志 url 的权限、文件类型和文件大小。目前 API 网关将每个输入编码为 JSON,因此 img 数据将被损坏(或者至少我不知道如何解码它)。我认为他们正在计划向 API 网关添加更多功能,其中之一就是文件上传
猜你喜欢
  • 2017-12-02
  • 1970-01-01
  • 1970-01-01
  • 2019-05-27
  • 1970-01-01
  • 2019-07-03
  • 2019-09-07
  • 1970-01-01
  • 2020-04-05
相关资源
最近更新 更多