RTCPeerConnection
と を使用してファイルを転送できるページを作成しましたdatachannels
。
受信したファイルと転送されたファイルがまったく同じであることを確認する必要があります。具体的には、パッケージが失われたり、途中で悪者が悪意のあるパッケージを送信したりしていないことを確認する必要があります。
ファイルをチャンクに分割し、それらのチャンクを識別せずに 1 つずつ送信します。新しい webrtc メッセージが反対側に来ると、そのデータをチェックなしでバッファにプッシュします。転送されたサイズが受信したサイズと等しい場合、ファイルを組み立てます。
この while プロセスは次のようになります。
差出人
function sliceFile(offset)
var reader = new window.FileReader();
reader.onload = (function () {
return function (e) {
sendChannel.send(e.target.result);
if (self.file.size > offset + e.target.result.byteLength) {
window.setTimeout(self.sliceFile, 0, offset + CHUNK_SIZE);
}
};
})(self.file);
}
受信機
var receiveBuffer = [];
var receivedSize = 0;
onwebrtcmessage = function(event) {
receiveBuffer.push(event.data);
receivedSize += event.data.byteLength;
if (receivedSize == expectedSize) {
assembleFile(receiveBuffer);
}
}
私の質問は: 受信したファイルが正しいことを確認する最善の方法は何ですか?
送信者と受信者でファイルの md5 チェックサムを計算しようとしました。FileApi
チェックサムを計算する私が知っている関数を生成しないため、JavaScriptの実装により、md5
15MBを超えるファイルのタブが強制終了されます。これにより、巨大なファイルのチェックサムをチェックできなくなります。