2017-07-21 48 views
0

我一直在寻找,所有的例子导致fs.createWriteStream这不是我想要的。如何管道到一个缓冲区而不是文件的Node.js流?

我使用archiver包,并想用archive.pipe()管道到可写流是文件,而是我可以用它来发送到s3.putObject缓冲区写入到一个S3桶。我如何设置一个缓冲区,我可以管道?

当我运行下面的代码时,出现“Error:not implemented”。

const stream = require('stream'); 
const archiver = require('archiver'); 

const archive = archiver('zip'); 
const outputStream = new stream.Writable(); 
outputStream.on('close',() => { 
    console.log('done'); 
}); 
outputStream.on('error', err => { 
    console.error(err); 
}); 
archive.pipe(outputStream); 
archive.append('Testing 1 2 3', { name: 'file1.txt' }); 
archive.finalize(); 

回答

1

Got it!

const bl = require('bl'); 
const AWS = require('aws-sdk'); 
const archiver = require('archiver'); 

const s3 = new AWS.S3(); 
const archive = archiver('zip'); 
let buf; 

archive.pipe(
    bl((err, data) => { 
    buf = data; 
    }) 
); 
archive.file('whoa.wav', { name: 'file1.wav' }); 
archive.finalize().then(x => { 
    console.log('finalized', buf); 
    s3.putObject(
    { 
     Bucket: 'xyz', 
     Key: 'whatever.zip', 
     Body: buf, 
    }, 
    err => { 
     console.log('s3 result:', err); 
    } 
); 
});