2016-01-18 99 views
6

我最近對Socket.io項目感興趣,我不知道是否有簡單的方式發送圖像,甚至其他類型的文件,而無需使用其他庫。我並沒有試圖將文件上傳到服務器進行存儲,我只是想將它廣播給當時在聊天室中的用戶。所以代碼應該是最小的。不過,我在編碼/解碼方面真的很糟糕,所以一些示例代碼會很棒。Socket.io聊天應用程序,也可以發送圖像,甚至文件

回答

5

我已經調整了Socket.io的官方聊天示例,並添加了通過base64編碼發送文件/圖像甚至視頻的功能,您可以查看client.jsindex.js中的源代碼,下面是最相關的部分,希望對你有所幫助。

在客戶端:

$('#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); 
} 

在服務器端:

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 
     } 

    ); 
}); 

這裏的項目:

https://github.com/Arch1tect/Chatbox

+0

我在傳送PDF 3MB問題〜4MB下載!網絡故障!我需要壓縮文件?你的代碼是免費發送base64,會是這個問題嗎? –

+0

@FábioZangirolami如果您發送較小的文件,如1 MB或100kb,它可以工作嗎?如果是這樣,它可能是一個心跳問題,socket.io發送心跳檢查用戶是否仍然連接,如果用戶在60秒內沒有響應心跳,他們被服務器斷開連接。問題是,在發送文件時,心跳被阻塞,所以這可能發生。 – Arch1tect

+0

更小的文件工作!我解決了問題,使用uploadfile而不是base64 .. tks! –

相關問題