node.js - 应考虑使用 nodejs 可扩展性和性能将文件上传到 s3 的良好做法
问题描述
我使用 multer 在 s3 中上传文件,我尝试了三种方法将文件上传到 s3
- 内存存储(默认)
- *自定义 S3stroage 引擎(通过直接从请求中提取文件并上传到 s3)
- 磁盘存储(默认)
在我的情况下,第二种方法在性能方面很好,但我认为它的可扩展性不高。但第二种方法可以节省大量时间(而不是写入磁盘然后从那里流式传输更直接)。但我不知道是什么将这种方法的缺点。任何人都可以建议我一个好的方法。
解决方案
您应该考虑使用S3 预签名 URL
因此,与其使用您的实例作为交易的中间人,不如创建一个 API,允许客户端检索一个短暂的唯一(s3 直接)url,客户端可以使用该 API 将文件直接上传到您在 S3 中的所需位置而无需去通过您的实例。我相信这比您现有的解决方案更具可扩展性。
但是,有一个警告。您的预签名网址(顾名思义)是“预先认证的”,在向您的客户提供此信息时要小心,并确保网址足够短,以防止进一步滥用。
此外,如果您想在文件成功上传到存储时收到通知,您可能需要额外实现监听 S3 事件。请参阅https://docs.aws.amazon.com/lambda/latest/dg/with-s3.html
推荐阅读
- lua - Lua:用 nil 解压?选择?
- python - keras 神经网络训练和验证损失有规律的尖峰
- ios - 数组中的外部图像从一个 VController 到另一个,不断获取(未解析的标识符)
- c++ - 如何将抽象类指针作为 Q_PROPERTY?
- google-analytics - 如何通过 Google Analytics API 获取 Google Ads 关键字和广告内容
- r - 用于多元广义线性回归的 R 中具有置信区间的偏残差图
- macos - 使用 Automator 在 finder 中获取文本文件的内容
- javascript - NodeJS - 从异步 for 循环中获取数组
- angular - Angular6中的测试路线
- javascript - 将超链接应用于文本的脚本