在AWS s3中保存图像
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在AWS s3中保存图像相关的知识,希望对你有一定的参考价值。
我打算让我的应用程序在AWS中保存图像和一些表单数据。我已经知道如何通过API网关和lambda在DynamoDB中保存Angular表单数据。但我还没有找到一种保存图像并在DynamoDB中存储图像S3位置的好方法。有人能告诉我什么是最佳做法?如果您有任何参考,将不胜感激。
我想可能直接从Angular将图像保存到S3然后让lambda监听事件并将图像S3位置保存在DynamoDB中。但是还没有找到直接从Angular保存到S3的好方法。
另一种方法是让lambda在DynamoDB中存储数据以保存图像,然后使用S3位置进行数据库保存。但还没有找到这样的例子。
也许有更好的方法。请指教。谢谢!
首先,重要的是有一个直接上传机制,无需通过API网关即可将图像上传到S3。由于我们也不希望将S3存储桶保持公开,因此您可以使用以下选项之一上传图像,同时具有访问控制权限。
- 使用S3 Signed URLs或CloudFront Signed URLs从API端点生成SignedUrls(如果使用CloudFront)。
- 使用IAM temperory访问凭证将文件上传到S3,或者通过使用API端点生成这些文件或使用Cognito Federated Identities(如果使用Cognito Userpools作为IDP,它将更加直接)。
这样您就可以从Angular App直接上传到S3。然后,让我们看看如何在DynamoDB中保存S3文件路径。
- 同步:在S3上传回调后,使用API调用保存DynamoDB中的URL(可以使用存储桶名称+路径+文件名生成URL)。
- 异步:让事件驱动的管道使用S3触发器向Lambda执行保存到DynamoDB。
通常在Angular应用程序中,您需要在上传后立即显示图像。为此,如果您使用异步方法,您可以构建图像URL并在Angular App中显示它(如果您有一个屏幕或组件来显示它),同时期望Lambda添加它并将其存储在DynamoDB中。
注意:在这里,我没有提到任何比其他方法更好的方法,因为每个方法都有另一方面的权衡。
以上是关于在AWS s3中保存图像的主要内容,如果未能解决你的问题,请参考以下文章
heroku 上的 Django 和 imagekit 保存到 AWS S3 非常慢
从 url 下载文件并将其上传到 AWS S3 而不保存 - node.js