Rest API-使用预签名的URL将大文件上传到S3,并在成功更新后更新后端

时间:2019-01-06 22:11:12

标签: node.js amazon-web-services rest amazon-s3

上下文

我正在为基于浏览器的平台构建无状态REST API,该平台需要存储一些用户生成的文件。这些文件可能位于GB中。

我正在使用AWS S3进行存储。过去,我曾经使用过AWS开发工具包来路由通过NodeJS服务器上传文件(基本上-上传到服务器,服务器上传到S3)。

我正在尝试找出如何使用预签名网址进行改进。我了解如何获取预签名网址以及如何将文件直接上传到S3的动态和流程。

我无法使用SQS或Lambda触发对象创建事件。 该架构必须与AWS无关。

问题 我需要实现的最简单流程很常见-

  1. 用户->打开个人资料
  2. 点击上传照片
  3. 客户端将请求发送到 / getSignedUrl
  4. 服务器返回文件名/类型的signedURL
  5. 客户端执行PUT / POST请求,将文件上传到signedUrl
  6. 上传成功

在此之后-我的理解是-

  1. 客户端告诉服务器-文件成功上传
  2. 服务器将照片的S3网址与用户相关联。

...那是我的问题。如何以安全方式将成功上传的文件关联回服务器上的用户?

不确定我丢失了什么。看来这是一个微不足道的用例,但我找不到任何有关它的东西。

1 个答案:

答案 0 :(得分:-1)

1 /我认为对于化身,您应该将其设置为公开阅读。 在

中创建签名的上传网址时
GET: /signed-upload-url

您需要将图像设置为公开读取。之后,您可以通过直接url与图像进行交互。由于这是头像,因此您可以对其进行压缩,并通过AWS Lambda函数减小图像的大小。

2 /如果您不想公开阅读,则需要与服务器关联以获取签名下载网址以与图像进行交互

GET: /signed-download-url