我们需要在AWS中保存产品图片。有两种方式,可以从前端(网站或移动应用程序)或后端上传。
在前端,我们需要存储AWS凭据,这可能是一个问题。因此,我们希望从后端使用AWS上传。流程将是:用户选择一个图像,然后将其上传到后端,后端将其上传到AWS。
这可以吗?会出现什么问题?
答案 0 :(得分:2)
将它上传到你的后端,可能是ec2实例,然后让ec2实例将文件上传到s3没有任何问题 - 这是一种安全的方法,也是我经常使用的方法。
但是,如果您希望直接从浏览器上传到s3,则无需将aws凭据公开给浏览器 - 您只需要将AWS Cognito添加到等式中。
使用cognito,您可以获得临时凭据,以便在不影响安全性的情况下进行上传。
答案 1 :(得分:1)
您还可以使用在后端生成的预先签名的S3网址(请参阅:Uploading Objects Using Pre-Signed URLs)并传递给前端应用。然后流程将是这样的:
在后端签署URL看起来像这样(Ruby):
s3 = Aws::S3::Resource.new(region: 'us-east-1')
url = s3.bucket('my-bucket').object('name-of-file').presigned_url(:put)
在前端,您可以使用fetch简单地执行此类操作:
fetch(signedUrl, { method: 'PUT', body: file })