使用ssh2 sftp节点

时间:2016-10-10 17:07:04

标签: node.js libssh2 ssh2-sftp

我试图使用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")之后,它就冻结了。可能有一半的文件被读取。

1 个答案:

答案 0 :(得分:1)

问题原来是ssh2-sftp似乎正在运行基础ssh2库的过时版本。从ssh2-sftp切换到ssh2的最新版本(0.5.2)并使用该库直接修复了问题(可能是这个问题:https://github.com/mscdex/ssh2/issues/450