Получение прогресса для 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)