通过前端最佳实践将图像上传到S3

时间:2018-09-06 17:01:23

标签: reactjs amazon-web-services amazon-s3

我有一个静态React网站,正在使用cognito中的标识池将图像上传到s3。我出于好奇而不是做任何事情。 我知道一种方法是将图片上传到服务器,然后再将图片上传到s3。 但是我想知道是否有最佳实践可直接从客户端进行而无需服务器。 我目前使用的方法之一是身份池ID是公共的。任何反馈都是有帮助的。

4 个答案:

答案 0 :(得分:0)

如果不想(不应该)在客户端代码库中公开自己的ID,我通常要做的是在.env文件中将ID设置为环境变量,然后使用名为{ {1}}将其公开给需要ID的.js文件。然后,当然要在您的.gitignore中包含dotenv文件,以避免在版本控制中对其进行跟踪。

此处有更多信息:https://github.com/motdotla/dotenv

答案 1 :(得分:0)

答案 2 :(得分:0)

此资源Serverless Stack将指导您完成您想做的事情,它帮助我配置了类似的“无服务器”部署。

您要描述的模式如下:

  1. 用户通过身份池进行身份验证,这将返回JWT
  2. Federated Identities返回有效JWT的AWS IAM凭证(注意:联合身份必须具有允许AWS IAM凭证访问S3的策略)
  3. 使用AWS IAM凭证,用户客户端可以将图像上传到S3

关于身份池,您的身份池ID实际上是一种公共资源,就像您的Web应用程序一样。用户必须存在于身份池中并且必须具有该用户的正确密码,这一事实保护了您的身份池。

答案 3 :(得分:0)

一个常见的模式是让您的服务器对用户请求进行身份验证并返回一个预签名的URL。然后可以使用标准HTTP方法将其直接上传到S3。参见Uploading Objects Using Pre-Signed URLs

似乎您关于公共身份库的问题实际上是一个不同的问题。我会保留大部分问题的答案,因为安全身份验证是另一个主题,您应该首先自己研究一下。