私は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
}
);
});
プロジェクトです:
https://github.com/Arch1tect/Chatbox
私はダウンロードに〜4メガバイトのPDF 3メガバイトを送信し、問題を抱えています!ネットワーク障害!私はファイルを圧縮する必要がありますか?あなたのコードは、base64を自由に送信しています、これは問題でしょうか? –
@FábioZangirolami1 MBまたは100 KBのような小さなファイルを送信すると機能しますか?そうであれば、ハートビートに問題がある可能性があります。socket.ioは、ハートビートを送信して、ユーザーがまだ接続されているかどうかを確認し、60秒でハートビートに応答しない場合、サーバーによって切断されます。問題は、ファイルを送信するときにハートビートがブロックされるためです。 – Arch1tect
小さいファイルも使えます!私はbase64 .. tksの代わりにuploadfileを使って問題を解決しました! –