使用 React 和 Elixir/Phoenix 将图像上传到 S3
Uploading images to S3 with React and Elixir/Phoenix
我正在计划如何完成此任务,到目前为止我有以下内容:
我在前端抓取一个文件,然后在提交时将文件名和类型发送到后端,在后端生成预签名 URL。我将其发送给 FE。然后我在前端发送文件。
这里的问题是,当我生成预签名时,我想通过后端将我的 UUID 文件名提交到我数据库中的 S3。不知道前端会不会顺利完成这个任务。我可以想到一些垃圾收集方法 - 但我想知道,是否有一种通常规定的方法可以做到这一点,不会引入 BE 不知道的失败可能性?
是的,还有另一种方法。您可以配置您的存储桶,使其在对象为 created/updated 时发送事件。您可以将此事件发送到 SNS 主题或 AWS Lambda。
从那里您可以向 Phoenix 应用程序 webhook 发出请求,该请求可以将其插入数据库。
优点是只有在创建文件时才会发生该事件。
更多信息,您可以阅读以下内容:https://docs.aws.amazon.com/AmazonS3/latest/dev/NotificationHowTo.html
我目前的处理方式是这样的:
- 压缩图片client side。
- 发送图片到后台应用服务器。
- Create a UUID 在后端。
- 将图片从s3发送到后端,使用UUID作为key。
- 成功后,将UUID放入数据库。
- 用 UUID 响应客户端,以便它可以显示图像。
通过执行这些步骤,您不会将错误引入数据库。
我正在计划如何完成此任务,到目前为止我有以下内容:
我在前端抓取一个文件,然后在提交时将文件名和类型发送到后端,在后端生成预签名 URL。我将其发送给 FE。然后我在前端发送文件。
这里的问题是,当我生成预签名时,我想通过后端将我的 UUID 文件名提交到我数据库中的 S3。不知道前端会不会顺利完成这个任务。我可以想到一些垃圾收集方法 - 但我想知道,是否有一种通常规定的方法可以做到这一点,不会引入 BE 不知道的失败可能性?
是的,还有另一种方法。您可以配置您的存储桶,使其在对象为 created/updated 时发送事件。您可以将此事件发送到 SNS 主题或 AWS Lambda。
从那里您可以向 Phoenix 应用程序 webhook 发出请求,该请求可以将其插入数据库。
优点是只有在创建文件时才会发生该事件。
更多信息,您可以阅读以下内容:https://docs.aws.amazon.com/AmazonS3/latest/dev/NotificationHowTo.html
我目前的处理方式是这样的:
- 压缩图片client side。
- 发送图片到后台应用服务器。
- Create a UUID 在后端。
- 将图片从s3发送到后端,使用UUID作为key。
- 成功后,将UUID放入数据库。
- 用 UUID 响应客户端,以便它可以显示图像。
通过执行这些步骤,您不会将错误引入数据库。