是否有任何节点库可以创建类似于文件流的内存流



我使用officegen库创建一个docx文件,然后我需要将其压缩并作为响应返回。我可以很容易地保存docx文件,然后创建一个zip文件并返回,但有没有其他方法可以将docx文件写入内存流而不是文件流,然后创建zip文件?

以下代码我尝试使用内存流库,但这不起作用。我认为WritableStream与文件流不相似。所以,如果用createWriteStream的输出替换WritableStream,它就可以工作了。

var streams = require('memory-streams');
var AdmZip = require('adm-zip');
var writer = new streams.WritableStream();
writer.on('close', function() {
var zip = new AdmZip();
zip.addFile("test2.docx", writer.toBuffer());
var willSendthis = zip.toBuffer();
return res.end(Buffer.from(willSendthis, 'binary'))
})
writer.on('error', function(){
console.log("error")
})
doc.on('error', function(){
console.log("error")
})
doc.generate(writer);

这不是officegen特有的东西,它只需要一个类似于关闭"事件"的文件流的可写流

我认为下面的库比您正在使用的库更好。

https://www.npmjs.com/package/memorystream

示例:

var MemoryStream = require('memorystream');
var memStream = new MemoryStream(['Hello',' ']);
var data = '';
memStream.on('data', function(chunk) {
data += chunk.toString();
});  
memStream.write('World');
memStream.on('end', function() {
// outputs 'Hello World!'
console.log(data);
});
memStream.end('!');

相关内容

最新更新