保存收到的文件从xmpp Strophe si-filetransfer

Save received files from xmpp Strophe si-filetransfer

本文关键字:xmpp Strophe si-filetransfer 文件 保存      更新时间:2023-09-26

我正在使用stropheh .si-filetransfer.js插件在我的web应用程序中实现文件传输。我可以在iq节内接收文件细节。我的问题是,我如何从iq节提取文件数据并下载它?

我引用的链接:https://github.com/strophe/strophejs-plugins/tree/master/ibb

谢谢

在接收端,您需要收集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.")
  }
};