node.js - 如何通过管道传输到作为缓冲区而不是文件的 Node.js 流?

标签 node.js buffer node-streams

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

最佳答案

知道了!

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

关于node.js - 如何通过管道传输到作为缓冲区而不是文件的 Node.js 流?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45244180/

相关文章:

javascript - 使用 OrientJS 创建带有链接列表的记录时出错

node.js - Node + Express 路由器 + 类型脚本 : string arg is not assignable to requesthandlerparams type

java - AWS SDK KMS - 在 Nodejs 中加密并在 Java 中解密

javascript - Nodejs单独的代码包括中间件use()

c# - 在 Reverse 方法中使用 Buffer<TSource> 有什么好处

node.js - 将数据管道传输到尚未准备好接收数据的可写流

c - 尝试编写计算指定文件中字节数的程序(C语言)

javascript - 解码 Node.js 中的缓冲区

javascript - 将多个 Javascript 对象合并为一个。 Stream.call(this) 是做什么的?

node.js - 从 Lambda 中的 NodeJS 流提取数据时遇到问题