2015-09-11 1 views
3

Я реализую передачу файлов в своем веб-приложении с помощью плагина strophe.si-filetransfer.js. Я могу получить информацию о файлах в iq stanza. Мой вопрос: как я могу извлечь данные из iq stanza и загрузить его?Сохранить полученные файлы из xmpp Strophe si-filetransfer

ссылки, которую я называю работать вокруг: https://github.com/strophe/strophejs-plugins/tree/master/ibb

Благодаря

ответ

3

На стороне приемника, вам необходимо собрать информацию о файле на 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.") 
    } 
}; 
+0

Новый улучшенный и полный answere здесь: http://stackoverflow.com/questions/35292181/complete-example-of-strophe-js-file-transfer/35358428#35358428 – beaver

Смежные вопросы