我试图使用ssh2-sftp库来读取/写入Node中的文件。当我在sftp站点上对较大的CSV文件(但不是太大 - 仅限2 MB)执行sftp.get,然后在返回的流上读取数据时,在第14个流之后,该呼叫挂在我身上。 ("数据")来电。我用几个不同的示例文件对此进行了测试,代码在较小的文件上运行良好。但是,如果一个CSV文件足够大,可以通过第14个电话,它就会挂起,而且它已经不能再读了,即使它还有更多要读的内容。而stream.on(" close")永远不会被调用。
显然这是非常奇怪的行为。希望也许有人使用这个库遇到了类似的东西,并有一些指导。
如果它有帮助,这里有一些代码
sftp.get(currentFileName).then((readStream) => {
var counter = 0;
readStream.on("data", function(d) {
counter++;
console.log("counter = " + counter);
});
readStream.on("close", function(err) {
if (err) {
console.error("Problem with read stream for file " + currentFileName + ", error = ", err);
}
//done reading the individual file, all went well
else {
console.log("done reading the stream");
}
});
readStream.on('error', function(e){
console.error("Error retrieving file: " + e);
})
readStream.resume();
在第14次调用readStream.on(" data")之后,它就冻结了。可能有一半的文件被读取。
答案 0 :(得分:1)
问题原来是ssh2-sftp似乎正在运行基础ssh2库的过时版本。从ssh2-sftp切换到ssh2的最新版本(0.5.2)并使用该库直接修复了问题(可能是这个问题:https://github.com/mscdex/ssh2/issues/450)