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