1

ノードでファイルを読み書きするために ssh2-sftp ライブラリを使用しようとしています。sftp サイトでより大きな CSV ファイル (ただし、大きすぎない - 2 MB のみなど) で sftp.get を実行し、返されたストリームでデータを読み取ると、14 番目の stream.on の後で呼び出しがハングします。 (「データ」) 呼び出し。いくつかの異なるサンプル ファイルでこれをテストしましたが、コードは小さなファイルで問題なく動作します。しかし、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();

readStream.on("data") への 14 回目の呼び出しの後、フリーズします。おそらく半分のファイルが読み取られます。

4

1 に答える 1

1

問題は、ssh2-sftp が基盤となる ssh2 ライブラリの古いバージョンを実行しているように見えることであることが判明しました。ssh2-sftp から ssh2 の最新 (0.5.2) バージョンに切り替え、そのライブラリを使用すると、問題が直接修正されました (これはhttps://github.com/mscdex/ssh2/issues/450である可能性があります) 。

于 2016-10-11T13:41:33.327 に答える