我使用 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 Stream或Transform 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/