我正在尝试使用ssh2模块流式传输cat命令,但它只是在执行的某个点挂起。我正在执行cat there.txt
,其中。txt大约有10 MB左右。
local = fs.createWriteStream('here.txt');
conn.exec('cat there.txt', function(err, stream) {
if (err) throw err;
stream.pipe(local).on('finish, function() { console.log('Done'); });
}
这只是完全停止在一个点。我甚至将流管道传输到本地标准输出,它会在一段时间后挂起。在我的实际代码中,我将它通过一堆其他转换流进行管道传输,因此我认为这比首先将文件传输到本地系统要好(文件可能大于200MB)。
我最近才开始使用流,所以当我通过各种转换流管道传输ssh流时,我没有像在示例中那样在可写流上结束(我应该包括我的实际代码,对不起!)。这导致它挂起。这最初是为了让我可以远程执行多个命令,并将它们的输出排序到一个文件中。
所以,我的原始代码是stream.pipe(transformStream)
,然后在完成后将transformStream推入数组。然后使用mergesort-stream
npm模块进行排序。相反,我只是将多个ssh命令(已转换)的结果写入临时文件,然后一次性对它们进行排序。
尝试createReadStream为大文件提供服务:
fs.exists(correctfilepath, function(exists) {
if (exists) {
var readstream = fs.createReadStream(correctfilepath);
console.log("About to serve " + correctfilepath);
res.writeHead(200);
readstream.setEncoding("binary");
readstream.on("data", function (chunk) {
res.write(chunk, "binary");
});
readstream.on("end", function () {
console.log("Served file " + correctfilepath);
res.end();
});
readstream.on('error', function(err) {
res.write(err + "n");
res.end();
return;
});
} else {
res.writeHead(404);
res.write("No datan");
res.end();
}
});