如何读取大文件并将其上传到 s3?
How do I read and upload a large file to s3?
我正在使用 Node.js .10.22 和 q-fs
我正在尝试将对象上传到 S3,一旦对象超过特定 MB 大小,S3 就会停止工作。
除了占用我机器上的所有内存外,它还给我这个错误
RangeError: length > kMaxLength
at new Buffer (buffer.js:194:21)
当我尝试在文件上使用 fs.read
时。
通常,当它工作时,我会 s3.upload
,然后将缓冲区放在 Body
字段中。
如何处理大对象?
您需要使用 API 的流式版本将您的可读文件系统流直接传送到您正在使用的 s3 模块提供的 S3 上传 http 请求正文流。这是直接来自 aws-sdk documentation
的示例
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) });
我正在使用 Node.js .10.22 和 q-fs
我正在尝试将对象上传到 S3,一旦对象超过特定 MB 大小,S3 就会停止工作。
除了占用我机器上的所有内存外,它还给我这个错误
RangeError: length > kMaxLength
at new Buffer (buffer.js:194:21)
当我尝试在文件上使用 fs.read
时。
通常,当它工作时,我会 s3.upload
,然后将缓冲区放在 Body
字段中。
如何处理大对象?
您需要使用 API 的流式版本将您的可读文件系统流直接传送到您正在使用的 s3 模块提供的 S3 上传 http 请求正文流。这是直接来自 aws-sdk documentation
的示例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) });