Чтение больших sftp-файлов с помощью ssh2 sftp Node

Я пытаюсь использовать библиотеку ssh2-sftp для чтения/записи файла в Node. Когда я выполняю sftp.get для большего CSV-файла (но не слишком большого — например, всего 2 МБ) на sftp-сайте, а затем читаю данные в возвращаемом потоке, вызов зависает у меня после 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") просто зависает. Может быть, половина файла прочитана.


person A B    schedule 10.10.2016    source источник


Ответы (1)


Проблема оказалась в том, что ssh2-sftp, похоже, использует устаревшую версию базовой библиотеки ssh2. Переключение с ssh2-sftp на самую последнюю (0.5.2) версию ssh2 и использование этой библиотеки напрямую устранило проблему (которая могла быть следующей: https://github.com/mscdex/ssh2/issue/450)

person A B    schedule 11.10.2016