node.js - 使用 Node js的S3文件上传流

标签 node.js file-upload amazon-s3

我正在尝试使用具有要求的 Node js 服务器在亚马逊 S3 上流式传输文件的解决方案:

  • 不要将临时文件存储在服务器或内存中。但是在某些限制下不完整的文件,可以使用缓冲来上传。
  • 对上传的文件大小没有限制。
  • 在文件上传完成之前不要卡住服务器,因为在上传大量文件的情况下,其他请求的等待时间会意外地出现 增加。

我不想使用从浏览器直接上传文件,因为在这种情况下需要共享 S3 凭据。从 node js 服务器上传文件的另一个原因是上传文件之前可能还需要应用一些身份验证。

我尝试使用 node-multiparty 来实现这一点。但它没有按预期工作。您可以在 https://github.com/andrewrk/node-multiparty/issues/49 查看我的解决方案和问题.它适用于小文件,但适用于大小为 15MB 的文件。

任何解决方案或替代方案?

最佳答案

您现在可以通过 official Amazon SDK for nodejs 使用流式传输在“将文件上传到 Amazon S3 存储桶”部分中或查看他们的 example on GitHub .

更棒的是,您终于可以做到事先不知道文件大小。只需将流作为 Body 传递:

var fs = require('fs');
var zlib = require('zlib');

var body = fs.createReadStream('bigfile').pipe(zlib.createGzip());
var s3obj = new AWS.S3({params: {Bucket: 'myBucket', Key: 'myKey'}});
s3obj.upload({Body: body})
  .on('httpUploadProgress', function(evt) { console.log(evt); })
  .send(function(err, data) { console.log(err, data) });

关于node.js - 使用 Node js的S3文件上传流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21657700/

相关文章:

javascript - 如何使 node.js 中的 fs.read 超时?

PHP 使用 PUT 代替 POST 上传文件

node.js - 将文件上传数据转发到另一个 API,就像 Node 和 express 一样

python - Boto3 超时故障排除

python - 调用 aws sagemaker 端点

mysql - 您主要是归档二进制数据而不是提供服务吗?将 BLOB 存储在 MySQL 中还是存储在 S3 上更好?

node.js - 从v4.13.7升级到5.0.1后, Node 应用程序崩溃

javascript - 监听特定房间的 Socket.io 事件

javascript - 将对象转换为格式化的可读文本

java - 如何处理 <p :fileUpload auto ="true"> with Selenium?