Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 将pipe()的输出存储到变量中_Node.js_Stream_Pipe_Stdout - Fatal编程技术网

Node.js 将pipe()的输出存储到变量中

Node.js 将pipe()的输出存储到变量中,node.js,stream,pipe,stdout,Node.js,Stream,Pipe,Stdout,我正在尝试将一个非常大的文件(5gb+)转换为base64编码字符串,并将该字符串作为有效负载发送到另一个请求中 由于各种限制,我不得不将此管道方法与Base64Encoder一起使用,并且我成功地实现了以下工作: var http = require('http'); var fs = require('fs'); var {Base64Encode} = require('base64-stream'); var server = http.createServer(function (r

我正在尝试将一个非常大的文件(5gb+)转换为base64编码字符串,并将该字符串作为有效负载发送到另一个请求中

由于各种限制,我不得不将此管道方法与Base64Encoder一起使用,并且我成功地实现了以下工作:

var http = require('http');
var fs = require('fs');
var {Base64Encode} = require('base64-stream');

var server = http.createServer(function (req, res) {
var stream = fs.createReadStream('test.tar');//test.tar is a very large file!
stream.pipe(new Base64Encode()).pipe(process.stdout);

});
server.listen(8000);

这成功地将文件分块编码为base64编码字符串,并将输出通过管道传输到标准输出。但是,我不想通过管道将输出传输到stdout,而是希望将输出捕获到可以操作的缓冲区或变量中。我已经看到很多帖子建议使用concat stream library,但我并没有成功地使这种方法发挥作用。任何帮助都将不胜感激

您可以创建一个新的可写流,并像这样通过管道将其导入

var http = require('http');
var fs = require('fs');
var {Base64Encode} = require('base64-stream');
const { Writable } = require('stream');
 var data = "";  // to store data
 const myWritable = new Writable({
     write(chunk, encoding, callback) {
        console.log("chunk", chunk.toString());
        data += chunk.toString(); // you can process data here or store it.
     }
});
var server = http.createServer(function (req, res) {
var stream = fs.createReadStream('test.tar');//test.tar is a very large file!
stream.pipe(new Base64Encode()).pipe(myWritable);
    console.log("my data", data);
});
 server.listen(8000);

谢谢你的回复!因此,当我运行代码时,看起来myWritable在挂起之前只处理一块数据。还需要将“const data”更改为“var data”,以启用对变量的追加。