6
我最近对Socket.io
项目感兴趣,我不知道是否有简单的方式发送图像,甚至其他类型的文件,而无需使用其他库。我并没有试图将文件上传到服务器进行存储,我只是想将它广播给当时在聊天室中的用户。所以代码应该是最小的。不过,我在编码/解码方面真的很糟糕,所以一些示例代码会很棒。Socket.io聊天应用程序,也可以发送图像,甚至文件
我最近对Socket.io
项目感兴趣,我不知道是否有简单的方式发送图像,甚至其他类型的文件,而无需使用其他库。我并没有试图将文件上传到服务器进行存储,我只是想将它广播给当时在聊天室中的用户。所以代码应该是最小的。不过,我在编码/解码方面真的很糟糕,所以一些示例代码会很棒。Socket.io聊天应用程序,也可以发送图像,甚至文件
我已经调整了Socket.io的官方聊天示例,并添加了通过base64编码发送文件/图像甚至视频的功能,您可以查看client.js
和index.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
}
);
});
这里的项目:
我在传送PDF 3MB问题〜4MB下载!网络故障!我需要压缩文件?你的代码是免费发送base64,会是这个问题吗? –
@FábioZangirolami如果您发送较小的文件,如1 MB或100kb,它可以工作吗?如果是这样,它可能是一个心跳问题,socket.io发送心跳检查用户是否仍然连接,如果用户在60秒内没有响应心跳,他们被服务器断开连接。问题是,在发送文件时,心跳被阻塞,所以这可能发生。 – Arch1tect
更小的文件工作!我解决了问题,使用uploadfile而不是base64 .. tks! –