【问题标题】:How to show the progress of download in the browser using socket.io for files downloaded using Node.js如何使用 socket.io 在浏览器中显示使用 Node.js 下载的文件的下载进度
【发布时间】:2015-11-16 22:05:00
【问题描述】:

我可以使用 Node.js 下载文件并显示并获取其进度。我想使用 socket.io 在浏览器上显示进度

谁能帮帮我...

我的代码:

var request = require('request');
var progress = require('request-progress');

var DOWNLOAD_DIR = '/usr/local/';
var file_name = 'googlenew.png' 


//displays progress on download on console
var callback = function(state){
    console.log('received size in bytes', state.received);
    console.log('total size in bytes', state.total);
    console.log('percent', state.percent);

} 

progress(request('https://www.google.com/images/srpr/logo3w.png'), {
    throttle:0,   
    delay: 0       
})
.on('progress', callback) 

.pipe(fs.createWriteStream(DOWNLOAD_DIR + file_name))
.on('error', function (err) {
 console.log("error");  
})
.on('close', function (err){
console.log("Download Complete"); 
})

【问题讨论】:

  • 其实我试过不使用socket.io下载文件。现在我正在尝试使用socket.io实现。请检查我编辑的代码而不使用socket.io
  • 使用此代码,我无法在浏览器中显示下载进度。所以,我打算使用socket.io实现
  • 您是在浏览器中下载文件还是上传到 Node.js 服务器?
  • 实际上,我正在尝试从浏览器下载文件,以便下载的文件将在 ubuntu 文件系统中。现在我正在尝试显示文件中的文件和目录列表系统以及状态。
  • 我的网页的当前格式是这样的。现在尝试显示文件的下载状态,是否下载完成(或)没有。如果没有,显示文件下载的百分比浏览器

标签: node.js socket.io


【解决方案1】:

由于您已经能够使用 Node.js 下载文件并在服务器端获取进度,因此您可以将此信息发送到客户端上的套接字。

//get connected
var chat = io.of("/socket").on('connection',onSocketConnected);

function onSocketConnected(socket){
   console.log("connected :"+socket.id);  
}

//in your existing callback function of progress
//send info to client 
var callback = function(state){
    console.log('received size in bytes', state.received);
    console.log('total size in bytes', state.total);
    console.log('percent', state.percent);
    io.sockets.emit('message', JSON.stringify({size: state.total, received: state.received, percent: state.percent, fileName: fileName}));

} 

然后,在客户端,您必须根据收到的信息使用 HTML-CSS-JS 更新进度条。您可能需要考虑使用this library 来获取进度条。下面的代码 sn-p 使用了建议的库。

<script src="/socket.io/socket.io.js"></script>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="bootstrap.js"></script>
<link rel="stylesheet" type="text/css" href="bootstrap.css" />

<div id="progressbar">
</div>

<script>
  var socket = io('http://localhost');
  socket.on('connect', function(){});
  socket.on('message', function(data){
    $('#progressbar').progressbar({
    maximum: 100,
    step: JSON.parse(data).percent
    });
  });
  socket.on('disconnect', function(){});
</script>

【讨论】:

  • 嗨,Prasun,我们如何将进度发送到 html 页面?我曾尝试使用上述代码。但是,我无法将进度发送到 html 页面
  • 打开套接字后,您可以使用 io.sockets.emit('message', JSON.stringify({size: state.total, received: state.received, percent:) 从服务器发送消息state.percent, fileName: fileName}));
  • 你现在工作正常。但是关于进度条我们需要使用'bootstrap-progressbar'模块
  • 您可以编写自己的 html 或使用其他任何东西,但是,这是我所知道的。一次,您从 socket.io 收到消息,您将更新相同的 HTML 元素,即 $('#progressbar') 。确保您正在接收来自服务器的消息并且正在触发 socket.on('message') 回调
  • 连同下面的js和css文件, 进度条功能是否需要使用“bootstrap-progressbar.js”文件,$('#progressbar').progressbar({ maximum: 100, step: JSON.parse(数据).percent });
猜你喜欢
  • 2014-11-18
  • 2017-02-15
  • 2022-12-30
  • 2022-11-11
  • 2019-08-26
  • 2012-07-04
  • 2010-10-18
  • 2018-09-13
  • 1970-01-01
相关资源
最近更新 更多