2016-01-18 65 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! –

相关问题