Сохранение полученных файлов из xmpp Strophe si-filetransfer

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

Ссылка, на которую я ссылался: https://github.com/strophe/strophejs-plugins/tree/master/ibb

Спасибо


person Japs    schedule 11.09.2015    source источник


Ответы (1)


На стороне получателя вам необходимо собрать информацию о файле с помощью функции fileHandler, затем захватить все фрагменты данных на ibbHandler (например, используя массив), и, наконец, вам нужно объединить все файлы части (блоки данных) и восстановить исходный файл. В приведенном ниже примере (адаптированном из предложенной вами ссылки) я предполагаю, что файл разделен на фрагменты с использованием FileReader API и 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.")
  }
};
person beaver    schedule 16.10.2015
comment
Новый улучшенный и полный ответ здесь: stackoverflow.com/questions/35292181/ - person beaver; 12.02.2016