2017-10-13 92 views
0

我使用JsZip和exceljs包。 ExcelJs可以將excel文檔寫入node.js流,jszip可以從流中讀取文件並將其添加到存檔中。我如何在它之間進行流式傳輸以方便使用它?我有這樣的解決方案,但我認爲它不好的柺杖......如何在node.js中傳輸流?

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

回答

0

我不太明白你想要做什麼,但似乎你是重塑一個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); 

但我看到你的依賴都不支持這樣的語法。