返回JSON以响应S3 Upload

时间:2017-01-01 23:30:25

标签: amazon-s3 aws-lambda aws-api-gateway serverless-framework serverless-architecture

我对AWS Lambda相对比较新,所以这可能是微不足道的,但到目前为止我还没弄明白。 我想返回JSON数据,因为我可以将其作为回调响应API网关请求返回。 我遇到的问题是我想处理用户上传的图像,并以JSON格式将该处理的结果返回给用户。 我知道我可以创建响应S3上传(触发器)的Lambda函数,但我无法以这种方式向用户返回数据。

2 个答案:

答案 0 :(得分:2)

您可以将其实现为单个同步操作。如果图像小于10MB,那么您应该能够创建Lambda函数来接受图像,将其上传到S3,处理它,并将数据返回给用户。这也假设您可以在29秒内上传到S3并处理图像,这是API网关超时请求之前的最长时间。

如果这对您不起作用,那么您将切换到异步处理。您可以使用Lambda函数响应S3上载事件并进行处理并将结果写入DynamoDB,RDS或Aurora中的表。然后,您可以公开API网关方法以检查已完成的处理并获取结果。然后,客户端必须轮询此API网关方法。

答案 1 :(得分:1)

我建议采用另一种方法:

  1. let the browser do the upload to S3直接使用javascript
  2. subscribe your lambda function to S3 events在那个桶中
  3. 让您的Lambda函数缩略图像,并根据命名约定将生成的缩略图保存回S3,例如,如果您的图像为["Port"]=> string(3) "465" ["Helo"]=> string(0) "" ["SMTPSecure"]=> string(3) "tls" ["SMTPAutoTLS"]=> ,则可以将其保存为someimage.jpg
  4. 上传完成后,让javascript客户端循环轮询S3存储桶,直到缩略图存在并显示。
  5. 这种方法可以提高上传速度,提升用户体验,并且非常可靠。

    =============================================== ==

    如果您确实想要使用API​​网关,则可以使用二进制数据now supported。您可以在函数中接收二进制或base64编码的数据。您可以使用包含base64编码处理图像和一些元数据的响应进行回复,例如:

    someimage-thumb.jpg

    这里的缺点:

    1. 由于我们引入了瓶颈,上传时间会变慢。
    2. 需要更多处理,特别是如果必须将大图像转换为/从base64转换。
    3. 浏览器将更加努力地渲染已处理的图像。