使用 ssh2 sftp 节点读取更大的 sftp 文件

Reading larger sftp files with ssh2 sftp Node

我正在尝试使用 ssh2-sftp 库 read/write Node.js 中的文件。当我在 sftp 站点上对一个较大的 CSV 文件(但不是太大 - 仅 2 MB)执行 sftp.get,然后读取返回流上的数据时,在第 14 个 stream.on("data") 调用。我已经用几个不同的示例文件对此进行了测试,代码在较小的文件上运行良好。但是,如果 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") 之后,它就停止了。可能读取了一半的文件。

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