На стороне приемника, вам необходимо собрать информацию о файле на fileHandler функции, а затем захватить все chuncks данных на ibbHandler (например, используя массив), и, наконец, вам нужно присоединиться ко всем частям файла (chancks данных) и восстановить исходный файл. В приведенном ниже примере (из предложенной ссылки) Я предполагаю, что файл chuncked используется с помощью API FileReader и readAsDataURL(), поэтому данные base64 закодированы.
var aFileParts, filename, mimeFile;
var fileHandler = function(from, sid, filename, size, mime) {
// received a stream initiation
filename = filename;
mimeFile = mime;
};
connection.si_filetransfer.addFileHandler(fileHandler);
var ibbHandler = function (type, from, sid, data, seq) {
switch(type) {
case "open":
// new file, only metadata
aFileParts = [];
break;
case "data":
// data
aFileParts.push(data);
break;
case "close":
// and we're done
var data = "data:"+mimeFile+";base64,";
for (var i = 0; i < aFileParts.length; i++) {
data += aFileParts[i].split(",")[1];
}
var span = document.createElement('span');
span.innerHTML = '<a href="'+data+'" download="'+filename+'">'+filename+</a>;
default:
throw new Error("shouldn't be here.")
}
};
Новый улучшенный и полный answere здесь: http://stackoverflow.com/questions/35292181/complete-example-of-strophe-js-file-transfer/35358428#35358428 – beaver