0

我使用 JsZip 和 exceljs 包。ExcelJs 可以将 excel doc 写入 node.js 流,jszip 可以从流中读取文件并将其添加到存档中。我如何在它之间进行流传输以便于使用它?我提出了这个解决方案,但我认为它的拐杖不好......

const stream2 = new Writable();
  stream2.result = [];
  stream2._write = function (chunk, enc, next) {
  this.result.push(chunk);
  next();
 };

  const stream1 = new Readable();
  stream1._read = function () {
    stream1.push(stream2.result.shift() || null);
  };

  let promise = new Promise((resolve, reject) => {
    excelDoc.write(stream2).then(() => {
      zip.file('excelDoc.xlsx', stream1);
      resolve(true);
    });
  });
4

1 回答 1

1

我不太明白您要做什么,但似乎您正在重新发明Duplex StreamTransform Stream。这些是可读和可写的流。

转换流是双工流,其中输出以某种方式与输入相关,我们可以将它们用于您正在尝试做的事情(我认为):

const stream = require('stream');

const transformStream = new stream.Transform({
  transform: (data, encoding, callback) => callback(null, data)
});

let promise = new Promise((resolve, reject) => {
  excelDoc.write(transformStream).then(() => {
    zip.file('excelDoc.xlsx', transformStream);
    resolve(true);
  });
});

旁注:通常您会执行以下操作:

inputStream.pipe(excelDoc).pipe(zipStream).pipe(outputStream);

但我看到你的依赖项都不支持这种语法。

于 2017-10-13T10:13:59.137 回答