【问题标题】:Save received files from xmpp Strophe si-filetransfer保存从 xmpp Strophe si-filetransfer 接收到的文件
【发布时间】:2015-12-08 04:56:23
【问题描述】:

我正在使用 strophe.si-filetransfer.js 插件在我的 Web 应用程序中实现文件传输。我能够在 iq 节中接收文件详细信息。我的问题是,如何从 iq 节中提取文件数据并下载?

我提到的链接可以解决:https://github.com/strophe/strophejs-plugins/tree/master/ibb

谢谢

【问题讨论】:

    标签: javascript jquery xmpp strophe


    【解决方案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.")
      }
    };
    

    【讨论】:

    猜你喜欢
    • 2020-07-04
    • 2015-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多