Javascript 如何将数据块转换成新的缓冲区?
在NodeJS中,我有一个文件上传的数据块,该文件以部分形式保存。我想通过执行new Buffer()将其转换,然后将其上载到Amazon s3 如果只有一个块,这就行了,但当有多个块时,我就不知道如何创建新的缓冲区() 目前,我的解决方案是将数据块写入我自己服务器上的真实文件中,然后将该文件的路径发送到AmazonS3Javascript 如何将数据块转换成新的缓冲区?,javascript,node.js,meteor,Javascript,Node.js,Meteor,在NodeJS中,我有一个文件上传的数据块,该文件以部分形式保存。我想通过执行new Buffer()将其转换,然后将其上载到Amazon s3 如果只有一个块,这就行了,但当有多个块时,我就不知道如何创建新的缓冲区() 目前,我的解决方案是将数据块写入我自己服务器上的真实文件中,然后将该文件的路径发送到AmazonS3 如何跳过文件创建步骤并将缓冲区发送到Amazon s3?我想您需要使用streaming-s3 var streamingS3 = require('streaming-s3'
如何跳过文件创建步骤并将缓冲区发送到Amazon s3?我想您需要使用streaming-s3
var streamingS3 = require('streaming-s3');
var uploadFile = function (fileReadStream, awsHeader, cb) {
//set options for the streaming module
var options = {
concurrentParts: 2,
waitTime: 20000,
retries: 2,
maxPartSize: 10 * 1024 * 1024
};
//call stream function to upload the file to s3
var uploader = new streamingS3(fileReadStream, aws.accessKey, aws.secretKey, awsHeader, options);
//start uploading
uploader.begin();// important if callback not provided.
// handle these functions
uploader.on('data', function (bytesRead) {
console.log(bytesRead, ' bytes read.');
});
uploader.on('part', function (number) {
console.log('Part ', number, ' uploaded.');
});
// All parts uploaded, but upload not yet acknowledged.
uploader.on('uploaded', function (stats) {
console.log('Upload stats: ', stats);
});
uploader.on('finished', function (response, stats) {
console.log(response);
cb(null, response);
});
uploader.on('error', function (err) {
console.log('Upload error: ', err);
cb(err);
});
};
这并不能解决我的问题,因为AmazonS3的最小限制是5MB。我的数据块大小约为2MB。无论我是否使用这种方法,我仍然必须将我的块组合成至少5 MB的块。有没有一种方法可以将块组合成一个更大的块,或者用多个块创建一个缓冲区?我没能按你的要求做。我通过写磁盘解决了这个问题。然后通过获取文件大小,因为s3上传无法处理您提到的太小的流。如果文件大小小于1MB,我会再次将文件读回RAM,然后上传到S3。如果文件大小大于1MB,我将执行fs.readFile,并将生成的流作为二进制缓冲区上载到正文中,这对我来说很有效。我无法逃避在本地保存文件-但是,在本地保存并不是一件坏事,因为当您上载一个非常大的映像时,您的ec2实例可能会退出,并且内存不足