我正在尝试使用具有要求的 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/