javascript - 如何在node.js中创建传输流?

标签 javascript node.js jszip exceljs

我使用 JsZip 和 exceljs 包。 ExcelJs可以将excel文档写入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);
    });
  });

最佳答案

我不太明白你想要做什么,但看起来你正在重新发明 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);

但我发现您的依赖项都不支持这种语法。

关于javascript - 如何在node.js中创建传输流?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46725170/

相关文章:

javascript - 如何将从 SVG 元素和 csv 文件生成的 PNG 图像导出到可下载的 ZIP 文件中

javascript - 通过 JSZip 将文件添加到现有 zip 存档

javascript - 从 url 下载 Pdf,将其保存在文件中,zip 然后下载 zip

javascript - token 刷新后 Angular 4 拦截器重试请求

javascript - 如何检查追加元素是否已经存在?

javascript - 为什么我的 promise 没有兑现?

node.js - 我们如何通过node.js 获取与现有Bluemix Message Hub 主题相关的数据?

调整 div 大小的 JavaScript 问题

javascript - 修改li :after from content script

mysql - 在服务器端使用express-handlebars在node.js上显示字符串集合