2017-01-19 3 views
2

У меня есть приложение Electron, которое загружает отложенный файл на предопределенный сервер с node-ftp. Загрузка работает как прелесть, но, несмотря на чтение нескольких предложений, я не могу понять, как получить информацию о фактическом прогрессе для индикатора прогресса. Моя загрузка кода до сих пор:Получение прогресса для FTP-загрузки с узлом

var ftp = new Client(); 
let uploadfile = fs.createReadStream(f.path); 
let newname = uuid(); //some function I use for renaming 
    ftp.on('ready', function() { 
     ftp.put(uploadfile, newname, function(err) { 
      if (err) throw err; 
     ftp.end(); 
    }); 
}); 
       c.connect({user: 'test', password: 'test'}); 
      } 

Я всегда наткнуться мониторинг событий «данными», но не смогли выяснить, как и где для доступа к нему (как вы можете видеть, что я совсем новичок в JavaScript) ,

ответ

5

получил. Я нашел ответ в streams with percentage complete

С мой код изменен

var ftp = new Client(); 
let uploadfile = fs.createReadStream(f.path); 
let newname = uuid(); //some function I use for renaming 
     ftp.on('ready', function() { 
      uploadfile.on('data', function(buffer) { 

      var segmentLength = buffer.length; 
      uploadedSize += segmentLength; 
      console.log("Progress:\t((uploadedSize/f.size*100).toFixed(2)+"%")); 
      }); 

      ftp.put(uploadfile, newname, function(err) { 
       if (err) throw err; 
       ftp.end(); 
      }); 
    }); 
c.connect({user: 'test', password: 'test'}); 

я получаю процент закачанный в консоли. Отсюда это всего лишь небольшой шаг к графическому выводу.

0

на стороне клиента, вы можете создать счет байт для потока загрузки (http://www.experts.exchange.com/questions/24041115/upload-file-on-ftp-with-progressbar-and-time-left.html)

  • набор нижнего предела ProgressBar до 0
  • установить верхний предел файл длину загружаемого файла
  • кормить индикатор выполнения с байтом рассчитывать

(http://www.stackoverflow.com/questions/24608048/how-do-i-count-bytecount-in-read-method-of-inputstream)

Возможно, вы можете использовать npm, например stream-meter (https://www.npmjs.com/package/stream-meter) или progress-stream (https://www.npmjs.com/package/progress-stream), и пропустите поток файлов, чтобы пропустить индикатор прогресса. я не уверен в этом, потому что я не знаю внутренних частей npms. в progress-stream функция transferred(), которая будет соответствовать именно

очень точный способ, чтобы иметь код на сервере, который дает обратную связь с браузером (http://www.stackoverflow.com/questions/8480240/progress-bar-for-iframe-uploads)

+0

Спасибо, но я все равно не понимаю. Моя проблема заключается не в том, как получить данные Progress-Bar из данных, а гораздо больше о том, «как мне получить фактический загруженный объем данных из переменных, которые у меня есть»? Как я могу получить доступ к этой информации? Приведенные примеры представлены на Java, а не на JavaScript, и npm будет работать точно, но я не мог узнать, как это сделать. Точность не является проблемой - я просто хочу дать некоторую визуальную обратную связь. – Torf