Soy nodo principiante y estoy tratando de configurar una carga de imágenes de múltiples archivos formidable que tendrá una barra de progreso y también una devolución de llamada después de cada carga que dinámicamente cargue todas las imágenes en la misma página una vez que se hayan cargado. Entiendo que necesito usar socket.io para interactuar de nuevo con el navegador después de que la carga haya comenzado. Formidable tiene un oyente de eventos para "progreso". Necesito mi script del lado del cliente para recibir los bytes recibidos para crear una barra de carga. Después de que el archivo termine de cargarse, quiero que socket.io pase al cliente la url de donde se cargó la imagen para que el cliente pueda cargar la imagen y anexarla al DOM de forma dinámica. Aquí está el código que tengo hasta ahora.Cómo conectar formidable carga de archivos a socket.io en Node.js
Mi pregunta es ¿cómo estructurar el código socket.io dentro del detector de eventos para el "progreso" para que pueda transmitir al cliente?
Aquí es un poco de pseudo-código sueltos para mostrar lo que estoy hablando:
//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);
});
});
Algunos progresos. La forma de transmitir al cliente socket.io es 'io.sockets.emit ('bytes', bytesReceived)' – mistersoftee