首页 > 解决方案 > 应考虑使用 nodejs 可扩展性和性能将文件上传到 s3 的良好做法

问题描述

我使用 multer 在 s3 中上传文件,我尝试了三种方法将文件上传到 s3

  1. 内存存储(默认)
  2. *自定义 S3stroage 引擎(通过直接从请求中提取文件并上传到 s3)
  3. 磁盘存储(默认)

在我的情况下,第二种方法在性能方面很好,但我认为它的可扩展性不高。但第二种方法可以节省大量时间(而不是写入磁盘然后从那里流式传输更直接)。但我不知道是什么将这种方法的缺点。任何人都可以建议我一个好的方法。

标签: node.jsamazon-s3multer

解决方案


您应该考虑使用S3 预签名 URL

因此,与其使用您的实例作为交易的中间人,不如创建一个 API,允许客户端检索一个短暂的唯一(s3 直接)url,客户端可以使用该 API 将文件直接上传到您在 S3 中的所需位置而无需去通过您的实例。我相信这比您现有的解决方案更具可扩展性。

但是,有一个警告。您的预签名网址(顾名思义)是“预先认证的”,在向您的客户提供此信息时要小心,并确保网址足够短,以防止进一步滥用。

此外,如果您想在文件成功上传到存储时收到通知,您可能需要额外实现监听 S3 事件。请参阅https://docs.aws.amazon.com/lambda/latest/dg/with-s3.html


推荐阅读