2016-01-18 8 views
6

Sono stato interessato al progetto Socket.io di recente e mi chiedo se c'è un modo semplice per inviare immagini o anche altri tipi di file senza dover usare altra libreria. Non sto cercando di caricare il file sul server per l'archiviazione, voglio solo trasmetterlo a coloro che sono nella chat room in quel momento. Quindi il codice dovrebbe essere minimo. Comunque sono davvero pessimo con la codifica/decodifica, quindi qualche codice di esempio sarebbe fantastico.Socket.io chat app che può anche inviare immagini e anche file

risposta

5

Ho adattato l'esempio di chat ufficiale di Socket.io e aggiunto funzionalità di invio di file/immagini e anche video tramite codifica base64, è possibile dare un'occhiata al codice sorgente in client.js e index.js, di seguito sono i più rilevanti parte, spero sia utile per te.

Sul lato client:

$('#uploadfile').bind('change', function(e){ 
    var data = e.originalEvent.target.files[0]; 
    readThenSendFile(data);  
}); 

function readThenSendFile(data){ 

    var reader = new FileReader(); 
    reader.onload = function(evt){ 
     var msg ={}; 
     msg.username = username; 
     msg.file = evt.target.result; 
     msg.fileName = data.name; 
     socket.emit('base64 file', msg); 
    }; 
    reader.readAsDataURL(data); 
} 

Sul lato server:

socket.on('base64 file', function (msg) { 
    console.log('received base64 file from' + msg.username); 
    socket.username = msg.username; 
    // socket.broadcast.emit('base64 image', //exclude sender 
    io.sockets.emit('base64 file', //include sender 

     { 
      username: socket.username, 
      file: msg.file, 
      fileName: msg.fileName 
     } 

    ); 
}); 

Ecco il progetto:

https://github.com/Arch1tect/Chatbox

+0

sto avendo problemi di invio pdf 3MB ~ 4 MB per scaricare ! errore di rete! Ho bisogno di comprimere il file? il tuo codice invia base64 liberamente, sarebbe questo il problema? –

+0

@ FábioZangirolami Funziona se si inviano file più piccoli come 1 MB o 100kb? Se è così potrebbe essere un problema con l'heartbeat, send.io invia heartbeat per verificare se l'utente è ancora connesso, se l'utente non risponde all'heartbeat in 60 secondi vengono disconnessi dal server. Il problema è che quando si invia un file, l'heartbeat è bloccato, quindi può succedere. – Arch1tect

+0

I file più piccoli funzionano! Ho risolto il problema usando uploadfile invece di base64 .. tks !! –

Problemi correlati