Во-первых, я надеюсь, вы понимаете, что я не силен в английском.
Для передачи файлов в топологии Mesh в Chrome,
Когда размер буфера составляет 16 МБ, канал закрывается с сообщением об ошибке.
«Uncaught NetworkError: не удалось выполнить «отправить» на «RTCDataChannel»: не удалось отправить данные»
(это в Chrome, а не в Firefox.)
Как отправить файл (более 16 МБ)?
файлWorker.js
var chunkSize = 16384;
onmessage = function(event) {
var file = event.data[0],
callbackId = event.data[1],
totalSize = file.size,
chunks = [],
curSize = 0,
reader,
chunk;
if (!FileReaderSync) {
reader = new FileReader();
reader.onload = function(event) {
console.log('chunking...');
chunks.push(event.target.result);
curSize += chunkSize;
slice();
};
slice();
} else {
reader = new FileReaderSync();
while (curSize < totalSize) {
console.log('chunking...');
chunk = file.slice(curSize, curSize + chunkSize);
chunks.push(reader.readAsArrayBuffer(chunk));
curSize += chunkSize;
}
postMessage([chunks, file.name, callbackId]);
}
function slice() {
if (curSize > totalSize) {
postMessage([chunks, file.name, callbackId]);
} else {
chunk = file.slice(curSize, curSize + chunkSize);
reader.readAsArrayBuffer(chunk);
}
}
};
файлОтправитель
_fileToPeers: function(chunks, fileName, progressCallbackId) {
var callback = callbacks[progressCallbackId],
chunkCount,
peerCount = 0;
objForEach(this.peers, function(peer) {
var channel = peer.fileChannel;
peerCount += 1;
if (channel) {
chunkCount = 0;
chunks.forEach(function(chunk) {
channel.send(chunk);
chunkCount += 1;
console.log('sending...'); // abnormal works!
callback(peerCount, chunkCount); // abnormal works!
});
channel.send(['end', fileName].join(','));
}
});
delete callbacks[progressCallbackId];
},