如何将文件上传连接到Node.js中的socket.io

如何将文件上传连接到Node.js中的socket.io,node.js,socket.io,Node.js,Socket.io,我是一名节点初学者,我正在尝试设置一个多文件图像上传,通过它可以有一个进度条,每次上传后还会有一个回调,上传完成后会将所有图像动态加载到同一页面。我知道我需要在上传开始后使用socket.io与浏览器交互。强大有一个“进步”的事件监听器。我需要客户端脚本来接收接收到的字节,以创建上载栏。上传完文件后,我希望socket.io将上传图像的url传递给客户端,以便客户端可以加载图像并将其动态附加到DOM中。这是我到目前为止的代码 我的问题是,如何在事件侦听器中构造socket.io代码,以便“pro

我是一名节点初学者,我正在尝试设置一个多文件图像上传,通过它可以有一个进度条,每次上传后还会有一个回调,上传完成后会将所有图像动态加载到同一页面。我知道我需要在上传开始后使用socket.io与浏览器交互。强大有一个“进步”的事件监听器。我需要客户端脚本来接收接收到的字节,以创建上载栏。上传完文件后,我希望socket.io将上传图像的url传递给客户端,以便客户端可以加载图像并将其动态附加到DOM中。这是我到目前为止的代码

我的问题是,如何在事件侦听器中构造socket.io代码,以便“progress”可以广播到客户端

下面是一些松散的伪代码,向您展示我所说的内容:

//formidable code:
app.post('/new', function(req,res){
    var form = new formidable.IncomingForm();

    form.addListener('progress', function(bytesReceived, bytesExpected){
      //Socket.io interaction here??
    });


    form.uploadDir = __dirname + '/public/images/';
    form.on('file', function(field, file) {
       //rename the incoming file to the file's name
       fs.rename(file.path, form.uploadDir + "/" + file.name);
       console.log(form.uploadDir + "/" + file.name);
    })
});

//socket.io code
io.sockets.on('connection', function (socket) {
    socket.on('upload', function (msg) {
        socket.broadcast.emit('progress', bytesReceived);
    });
});

这应该对你有用

form.addListener('progress' , function(bytesRecieved , bytesExpected){
  io.sockets.on('connection', function (socket) {
   socket.emit('uploadProgress', ((bytesRecieved * 100)/bytesExpected));
  });
 });
在客户端:

script(src='/socket.io/socket.io.js')  // thats jade, but link to the .js anyway you want
 var socket = io.connect('http://localhost');
  socket.on('uploadProgess' , function(percent){
   $('#percent').text(percent); 
 });

我使用了node.v1.0.14和socket.io 1.0.0-pre

当客户端发送请求时,将建立连接,服务器将根据该客户端的会话id(例如)为此客户端创建一个房间

之后在进度事件中,我们将向房间中的一位客户广播百分比

您可以在此处找到有关房间的更多信息:

服务器app.js(主,启动时):

服务器帖子:

form.on('progress' , function (bytesRecieved , bytesExpected) {
  console.log('received: ' + bytesRecieved);
  io.sockets.in('sessionId').emit('uploadProgress', (bytesRecieved * 100) / bytesExpected);
});
客户:

var socket = io.connect('http://localhost:9000');
socket.on('uploadProgress' , function (percent){
  alert(percent);
});

当您想要处理会话时,这可能会有所帮助:

一些进展。广播到socket.io客户端的方法是
io.sockets.emit('bytes',bytesReceived)
那么,如何通过socket而不是xhr发送文件,并对其进行处理呢?
var socket = io.connect('http://localhost:9000');
socket.on('uploadProgress' , function (percent){
  alert(percent);
});