Получение прогресса для FTP-загрузки с узла

У меня есть приложение Electron, которое загружает удаленный файл на предопределенный сервер с помощью узла 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'});

Я всегда сталкиваюсь с наблюдением за событием "data", но не могу выяснить, как и где к нему получить доступ (как вы видите, я довольно новичок в JavaScript).

2 ответа

Решение

Понял. Я нашел ответ в потоках с процентом завершения

С моим кодом изменился на

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'});

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

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

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

( /questions/43784605/kak-rasschitat-bytecount-v-metode-chteniya-inputstream)

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

очень точный способ - разместить на сервере код, который дает обратную связь браузеру ( /questions/21588858/indikator-vyipolneniya-zagruzki-fajlov-iframe)

Другие вопросы по тегам