如何通过管道传输到作为缓冲区而不是文件的 Node.js 流?
How to pipe to a Node.js stream that's a buffer, not a file?
我到处搜索,所有示例都导致 fs.createWriteStream
这不是我想要的。
我正在使用 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();
知道了!
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);
}
);
});
我到处搜索,所有示例都导致 fs.createWriteStream
这不是我想要的。
我正在使用 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();
知道了!
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);
}
);
});