请问有人能告诉我如何使用strophe库在XMPP中实现文件传输吗?
请问有人能告诉我如何使用strophe库在XMPP中实现文件传输吗?
有一个 si-filetransfer 插件可用。 您需要研究代码并添加处理程序,类似于以下内容:
connection.si_filetransfer.(addhandler);
然后与之一起使用:
connection.si_filetransfer.send(to, sid, filename, size, mime, cb);
我之前尝试过,但不成功,因为它某种原因导致了我的strophe连接中断。也许你会更幸运 =)
// get Strohe.Connection
getStropheConnection().si_filetransfer.send(file.id,
fullJid, sid, file.filename, file.size, filetype, function(err) {
if(err) {
// err happen
return;
}
// when codes comes here,mean your peer agree to receive your file
// and we will use open to tell your peer you are going to send file
// open: function (to, sid, bs, cb)
getStropheConnection().ibb.open(fullJid, sid, '4096', function(err) {
if(err) {
// err happen with open
return;
}
// code comes here, you can send data
// call data method to send every peach of your file data
// data: function (to, sid, seq, data, cb)
file.seq = 0; // the file sequence
getStropheConnection().ibb.data(fullJid, sid, file.seq, d0, function(err) {
if(err) {
// err happen with data
return;
}
// repeat sending data util finish
// call close tell your peer the file sending is finish
// close: function (to, sid, cb)
getStropheConnection().ibb.close(fullJid, sid, function(err) {
if(err) {
// err happen with close
return;
}
}.bind(this));
}.bind(this));
}.bind(this));
}.bind(this));
并且接收
_ibbReceiveFileCb : function(type, from, sid, data, seq, blocksize) {
switch(type) {
case "open":
break;
case "data":
break;
case "close":
// every data through base64 encode, and 3 byte turn to 4 byte
// compare receive size and file size make sure receive all data
var resize = Math.ceil(file.blocksize * (file.seq + 1) / 4) * 3;
var size = file.size;
if(resize >= size) {
// receive all data
} else {
// not receive all data
}
break;
default:
throw new Error("shouldn't be here.");
}
},
很抱歉无法提供完整代码,因为它包含其他代码,例如一些JSON对象来保存数据,这可能会让您感到困惑。只有简单的框架就足够了。