如何将数据管道传输到 Node.js 中的缓冲流而不是文件?

3
我已经到处搜寻了,所有的示例都指向fs.createWriteStream,但这并不是我想要的。
我正在使用archiver包,并希望使用archive.pipe()将数据传输到一个可写流中,该流不是文件,而是一个缓冲区,我可以使用它将数据发送到s3.putObject以写入S3存储桶。如何设置一个缓冲区,以便可以进行数据传输?
当我运行下面的代码时,会出现“错误:未实现”。
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个回答

4
明白了!
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);
    }
  );
});

运作良好,谢谢! - Hop hop

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接