【问题标题】:Progress bar based on file download基于文件下载的进度条
【发布时间】:2013-10-17 16:01:46
【问题描述】:

如何根据节点 webkit 中下载的文件显示进度条?

var https = require('https');
var fs = require('fs');
var exec = require('child_process').exec;

var file = fs.createWriteStream("update_setup.exe");
var len = 0; 
var request = https.get(url + 'appdata/update_setup.exe', function (response) {
  response.pipe(file);
  response.on('data', function (chunk) {
    file.write(chunk);
    len += chunk.length;
    var percent = (len / response.headers['content-length']) * 100;
  });
  file.on('finish', function () {
    setTimeout(function () { win.close(); exec('update_setup.exe'); }, 1000);
  });
});

【问题讨论】:

    标签: javascript node.js stream download node-webkit


    【解决方案1】:

    读取响应的content-length 标头并将其与已下载的字节数进行比较。

    var http = require('http');
    var fs = require('fs');
    
    var file = fs.createWriteStream('dest');
    var len = 0;
    
    http.get(url, function(res) {
      res.on('data', function(chunk) {
        file.write(chunk);
        len += chunk.length;
    
        // percentage downloaded is as follows
        var percent = (len / res.headers['content-length']) * 100;
      });
      res.on('end', function() {
        file.close();
      });
      file.on('close', function() {
        // the file is done downloading
        exec('update_setup.exe');
      });
    });
    

    此代码检查接收到的数据的长度并将其添加到len。将len 除以文件的总大小,再乘以一百得到百分比。

    【讨论】:

    • 当我尝试运行此代码时,文件会下载,但大小是应有的两倍,并且 Windows 说它不是有效的应用程序。
    • 去掉res.pipe(),把file.on('finish', function() {});改成res.on('end', function() {});file.write()res.pipe() 的替代品,但允许我们了解每个数据块的大小。
    • 好的,我已经进行了这些更改,文件已正确下载,但现在文件将无法打开。
    • 其实还是用file.on('close', function() {});吧,因为响应流结束时,文件不保证写完。
    • 不幸的是仍然没有执行文件
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-10
    • 1970-01-01
    • 2013-10-03
    • 2022-10-15
    • 2016-07-30
    相关资源
    最近更新 更多