我正在使用strophe.si-filetransfer.js插件在我的Web应用程序中实现文件传输。我能够在iq节中接收文件详细信息。我的问题是,如何从iq节中提取文件数据并下载?
我提到的链接可以解决:https://github.com/strophe/strophejs-plugins/tree/master/ibb
由于
答案 0 :(得分:3)
在接收方,你需要收集 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.")
}
};