【问题标题】:How to pipe to a Node.js stream that's a buffer, not a file?如何通过管道传输到作为缓冲区而不是文件的 Node.js 流?
【发布时间】:2017-12-27 21:22:06
【问题描述】:

我一直在到处搜索,所有示例都指向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();

【问题讨论】:

标签: node.js buffer node-streams


【解决方案1】:

知道了!

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);
    }
  );
});

【讨论】:

  • 效果很好,谢谢!
猜你喜欢
  • 2015-07-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-31
  • 1970-01-01
  • 1970-01-01
  • 2016-06-14
相关资源
最近更新 更多