如何阅读并将大文件上传到s3?

Hou*_*man 2 amazon-s3 fs node.js

我正在使用Node.js .10.22和q-fs

我正在尝试将对象上传到S3,一旦对象超过某个MB大小就停止工作.

除了占用我机器上的所有内存外,它还给了我这个错误

RangeError: length > kMaxLength
at new Buffer (buffer.js:194:21)
Run Code Online (Sandbox Code Playgroud)

当我尝试fs.read在文件上使用时.

通常,当这个工作时,我这样做s3.upload,并将缓冲区放在Body字段中.

我该如何处理大型物体?

Pet*_*ons 5

您将需要使用API​​的流式版本将可读文件系统流直接传输到您正在使用的s3模块提供的S3上载http请求正文流.这是一个直接来自aws-sdk文档的例子

var fs = require('fs');

var body = fs.createReadStream('bigfile');
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) });
Run Code Online (Sandbox Code Playgroud)

  • 但是,如果我想再次使用该文件,我可能只需要解压缩它?尽管如此,删除`.pipe(zlib.createGzip())`的东西也可以. (2认同)