我对AWS Lambda相对来说比较新,所以也许这是微不足道的,但到目前为止我还没有弄清楚。 我想返回JSON数据,就像我可以将它作为回调函数返回以响应API网关请求一样。 我遇到的问题是我想处理用户上传的图像,并以JSON格式将处理结果返回给用户。 我知道我可以创建响应S3上传(触发器)的Lambda函数,但我无法以这种方式向用户返回数据。响应S3上传返回JSON
2
A
回答
2
您可以将其作为单个同步操作来实现。如果图像少于10MB,那么您应该可以创建Lambda函数来接受图像,将其上传到S3,处理它并将数据返回给用户。这也假定您可以上传到S3并在29秒内处理图像,这是API网关超时请求之前的最长时间。
如果这不适合你,那么你将切换到异步处理。您可以拥有一个响应S3上传事件的Lambda函数,并执行处理并将结果写入DynamoDB,RDS或Aurora中的表中。然后,您可以公开一个API网关方法来检查完成的处理并获得结果。客户端然后必须轮询这个API网关方法。
1
我会建议替代办法:
- let the browser do the upload to S3直接使用javascript
- subscribe your lambda function to S3 events在桶
- 让你的lambda函数的缩略图图像并保存生成的缩略图回S3基于命名约定,例如如果你的图像是
someimage.jpg
你可以将它保存为someimage-thumb.jpg
。 - 上传完成后,让javascript客户端循环查询S3存储桶,直到缩略图存在并显示。
这种方法会导致上传更快,用户体验更好,应该是非常可靠的。
============================================== ===
如果你确实真的想使用API网关,这是可能的,因为二进制数据是now supported。您可以将函数中的数据以二进制或base64编码方式接收。因为我们要介绍的一个瓶颈
- 时间上传速度会变慢:你可以与包括编码处理后的图像的Base64和一些元数据的响应回复,例如:
{ "thumbnail": "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNk+P+/HgAFhAJ/wlseKgAAAABJRU5ErkJggg==", "metadataKey1": "some data", "metadataKey2": "some other data" }
这里的缺点。
- 需要进行更多的处理,特别是如果必须将大图像转换为base64或从base64转换大图像。
- 浏览器将更难以渲染处理后的图像。
相关问题
- 1. s3文件上传不返回响应
- 2. 返回JSON响应
- 3. 返回JSON响应
- 4. S3响应403上传
- 5. 返回SQS响应,JSON
- 6. JSON中的Amazon S3响应?
- 7. 在PHP中返回HTML JSON响应
- 8. 返回多个模型的JSON响应
- 9. 以JSON格式返回Web API响应
- 10. 从laravel控制器返回JSON响应
- 11. HttpPost响应不会返回json对象
- 12. jQuery AJAX JSON响应返回键“d”
- 13. Laravel JSON()响应返回值的两倍
- 14. JSON响应总是返回true
- 15. SonataUserBundle Api响应返回空JSON
- 16. fineuploader json响应不在Firefox中返回
- 17. json对象由http响应返回
- 18. JSON返回null响应与jQuery $ .ajax
- 19. 以json格式返回solr响应
- 20. Golang发布返回json响应
- 21. iron-ajax响应为php json响应返回null
- 22. MediaMetadataRetriever在S3上返回null
- 23. 锂返回JSON响应接受:应用/ JSON
- 24. Grails文件上传JSON响应
- 25. JSON在FireFox和Safari(Windows Vista)上返回空响应
- 26. 返回文件或JSON响应的url上的AJAX?
- 27. 返回&文件上传支持 - JSON
- 28. Node.js:文件上传API和JSON返回
- 29. jQuery .submit()上传表单显示返回Slim PHP的响应
- 30. jQuery插件'uploadify' - 从上传脚本返回响应的方式?
您需要包含代码示例。 –