从后端将图像保存在 AWS 中
Saving images in AWS from backend
我们需要在 AWS 中保存产品图片。有两种方式,可以从前端(网站或手机应用程序)或后端上传。
在前端,我们需要存储 AWS 凭证,这可能是个问题。所以,我们想从后端上传到 AWS。流程将是:用户 select 一张图片,并将其上传到后端,然后后端将其上传到 AWS。
这样可以吗?会出现什么问题?
将它上传到您的后端(大概是一个 ec2 实例),然后让 ec2 实例将文件上传到 s3 没有任何问题 - 这是一种安全的方式,也是我经常使用的方法。
但是,如果您希望直接从浏览器上传到 s3,则无需向浏览器公开您的 aws 凭证 - 您只需要将 AWS Cognito 添加到等式中。
使用 Cognito,您可以获得临时凭据,这样您就可以在不影响安全的情况下进行上传。
您还可以使用预签名的 S3 URL(请参阅:Uploading Objects Using Pre-Signed URLs),它在后端生成并传递给前端应用程序。那么流程将是这样的:
- 从您的后端服务请求预签名URL
- 前端应用将文件 PUT 到已签名的 URL
在后端签署 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 })
我们需要在 AWS 中保存产品图片。有两种方式,可以从前端(网站或手机应用程序)或后端上传。
在前端,我们需要存储 AWS 凭证,这可能是个问题。所以,我们想从后端上传到 AWS。流程将是:用户 select 一张图片,并将其上传到后端,然后后端将其上传到 AWS。
这样可以吗?会出现什么问题?
将它上传到您的后端(大概是一个 ec2 实例),然后让 ec2 实例将文件上传到 s3 没有任何问题 - 这是一种安全的方式,也是我经常使用的方法。
但是,如果您希望直接从浏览器上传到 s3,则无需向浏览器公开您的 aws 凭证 - 您只需要将 AWS Cognito 添加到等式中。
使用 Cognito,您可以获得临时凭据,这样您就可以在不影响安全的情况下进行上传。
您还可以使用预签名的 S3 URL(请参阅:Uploading Objects Using Pre-Signed URLs),它在后端生成并传递给前端应用程序。那么流程将是这样的:
- 从您的后端服务请求预签名URL
- 前端应用将文件 PUT 到已签名的 URL
在后端签署 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 })