2016-10-10 30 views
1

私はssh2-sftpライブラリを使ってNodeでファイルを読み書きしようとしています。私はsftpのサイトで大きなCSVファイル(しかし、2 MBのように大きすぎない)をsftp.getし、返されたストリームのデータを読み込むと、14番目のストリームの後でコールが私にぶつかっています。 (「データ」)呼を要求する。私はいくつかの異なるサンプルファイルでこれをテストしましたが、コードは小さなファイルでうまく動作します。しかし、CSVファイルが十分に大きくて14回目のコールを過ぎると、ハングアップするだけで、それ以上読むことはできないようです。そしてstream.on( "close")も決して呼び出されません。ssh2でより大きいsftpファイルを読むsftpノード

明らかに、これはかなり奇妙な動作です。多分誰かがこのライブラリを使って同様のものに遭遇し、何らかの指針を持っていることを期待していました。

それがすべてで助けている場合、ここではいくつかのコード

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(「データ」)に第14回呼び出した後、それだけでフリーズ。多分ファイルの半分を読んで。

答えて

1

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

関連する問題