Как отображать индикатор выполнения при загрузке файлов в nwjs

Я создаю приложение NWJS, которому необходимо загрузить некоторые файлы с URL-адреса, и мне нужно отобразить индикатор выполнения, чтобы отображать ход загрузки.

Мой текущий код просто загружает файл, но не отображает и не обновляет индикатор выполнения, и мне интересно, как это можно сделать.

var fs = require('fs');
var https = require('https');

var file = fs.createWriteStream(filepath);

var request = https.get(fileurl, function (response) {
    response.pipe(file);
    $('#progressbar_upload').addClass('bg-success');
    uploadDone();
});

Это просто загрузит файл, а затем изменит цвет индикатора выполнения, когда загрузка будет завершена. Я хочу, чтобы он изменил ширину индикатора выполнения, чтобы показать прогресс загрузки по мере ее загрузки.

Заранее спасибо.


person 004123    schedule 09.05.2018    source источник


Ответы (1)


Вы можете проверить общий content-length из response, чтобы узнать общий размер загрузки и когда он вернет data в событие data. Наконец, вы можете узнать его длину и рассчитать процент загрузки следующим образом:

var fs = require('fs');
var https = require('https');

var file = fs.createWriteStream(filepath);

var contentLength;
var length;
var responseData = '';
var request = https.get(fileurl, function (response) {
    contentLength = parseInt(response.headers['content-length']); // in bytes
    length = [];

    // Grab the data buffer of the request
    response.on('data', (d) => {
        responseData += d;
        length.push(d.length);
        let sum = length.reduce((a, b) => a + b, 0);
        let completedParcentage = (sum / contentLength) * 100;
        console.log(`completed reading ${sum} bytes out of ${contentLength} bytes`);
        console.log(`${completedParcentage} percentage of download complete`);

        // Modify this to alter the width of progress-bar using percentageCompleted
        $('#progressbar_upload').addClass('bg-success');
    });

    response.on('end', () => {
        file.write(responseData);
        uploadDone();
    })

});
person kgangadhar    schedule 09.05.2018
comment
Это не работает. похоже, что response.on ('end') не срабатывает. - person 004123; 10.05.2018
comment
Вы получите процент завершения загрузки, когда data будет отправлен в data событие, вам нужно использовать вычисленное completedParcentage в data событии, чтобы изменить ширину progress-bar. - person kgangadhar; 10.05.2018