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