在nwjs中下载文件时如何显示进度条

时间:2018-05-09 12:02:43

标签: javascript node.js nwjs

我正在创建一个需要从网址下载一些文件的NWJS应用程序,我需要显示一个进度条来显示下载的进度。

我当前的代码只是下载文件,但没有显示和更新进度条,我想知道如何做到这一点。

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

这只是下载文件,然后在下载完成后更改进度条的颜色。我希望它能够更改进度条的宽度,以显示正在下载的下载进度。

提前致谢。

1 个答案:

答案 0 :(得分:1)

您可以检查content-length中的总response以获得总下载大小以及何时返回datadata个事件。最后,您可以获取其长度,并可以按如下方式计算下载百分比:

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

});