XMPP 客户端开发 ----- 用户上传头像(四)

这篇记录下我利用XMPP实现上传头像的过程,发现XMPP真心很强大很多功能都已经实现了。我们只要直接调用就可以了。下面上代码了。

引入头文件   这个头文件需要自己导入不然  XMPPvCardTemp  下的方法调用不了。

#import "XMPPvCardTemp.h"

声明相关对象

// 声明上传头像相关对象
@property (nonatomic , strong) XMPPvCardCoreDataStorage *xmppvCardStorage;
@property (nonatomic , strong) XMPPvCardTempModule *xmppvCardTempModule;
@property (nonatomic , strong) XMPPvCardAvatarModule *xmppvCardAvatarModule;

初始化相关对象

// 初始化方法
- (void)setupStream
{
    _xmppStream = [[XMPPStream alloc] init];
    [_xmppStream addDelegate:self delegateQueue:dispatch_get_main_queue()];

    _xmppRosterDataStorage = [[XMPPRosterCoreDataStorage alloc] init];
    _xmppRoster = [[XMPPRoster alloc] initWithRosterStorage:_xmppRosterDataStorage];
//    _xmppRoster.autoFetchRoster = YES;
//    _xmppRoster.autoAcceptKnownPresenceSubscriptionRequests = YES;
//

    _xmppvCardStorage = [XMPPvCardCoreDataStorage sharedInstance];
    _xmppvCardTempModule = [[XMPPvCardTempModule alloc] initWithvCardStorage:_xmppvCardStorage];
    _xmppvCardAvatarModule = [[XMPPvCardAvatarModule alloc] initWithvCardTempModule:_xmppvCardTempModule];

    [_xmppvCardTempModule addDelegate:self delegateQueue:dispatch_get_main_queue()];
    [_xmppvCardAvatarModule addDelegate:self delegateQueue:dispatch_get_main_queue()];

}

在登录成功的回调中与XMPPStream对象进行关联

// 登陆成功
- (void) xmppStreamDidAuthenticate:(XMPPStream *)sender
{
    [self goOnline];
    NSLog(@"登陆成功");
    [[NSUserDefaults standardUserDefaults] setObject:@"success" forKey:XMPPLogin];
    [_xmppRoster activate:_xmppStream];
    [_xmppRoster addDelegate:self delegateQueue:dispatch_get_main_queue()];

    [_xmppvCardTempModule activate:_xmppStream];
    [_xmppvCardAvatarModule activate:_xmppStream];

    [self queryRoster];

}

上传头像的代码

- (void) offeringProfile
{
    NSXMLElement *vCardXML = [NSXMLElement elementWithName:@"vCard" stringValue:@"vcard-temp"];
    NSXMLElement *photoXML = [NSXMLElement elementWithName:@"PHOTO"];
    NSXMLElement *typeXML = [NSXMLElement elementWithName:@"TYPE" stringValue:@"image/jpeg"];

    UIImage *image = [UIImage imageWithData:[NSData dataWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"changmen" ofType:@"jpg"]]];

    NSData *dataFromImage = UIImageJPEGRepresentation(image, 0.7f);

    NSXMLElement *binvalXML = [NSXMLElement elementWithName:@"BINVAL" stringValue:[dataFromImage base64Encoding]];
    [photoXML addChild:typeXML];
    [photoXML addChild:binvalXML];
    [photoXML addChild:photoXML];

    XMPPvCardTemp * myvCardTemp = [_xmppvCardTempModule myvCardTemp];
    NSLog(@"%@",myvCardTemp);

    if (myvCardTemp)
    {
        myvCardTemp.photo = dataFromImage;
        [_xmppvCardTempModule updateMyvCardTemp:myvCardTemp];
    }else
    {
        XMPPvCardTemp *newvCardTemp = [XMPPvCardTemp vCardTempFromElement:vCardXML];
        newvCardTemp.nickname = @"nick";
        [_xmppvCardTempModule updateMyvCardTemp:newvCardTemp];

    }

}

原文地址:http://blog.csdn.net/qqmcy/article/details/42422893

时间: 2024-07-30 01:31:36

XMPP 客户端开发 ----- 用户上传头像(四)的相关文章

为office 365用户上传头像

方法一 使用outlook里面配置的office 365邮箱中的上传头像功能. 方法二 使用工具进行上传,注意此工具在中国大陆实际使用过程中,可能需要×××才能正常连接.CodeTwo User Photos for Office 365 - Thanks for download https://www.codetwo.com/freeware/user-photos-for-office-365-thanks 欢迎关注如下的微信公众号,获取更多IT资讯: 原文地址:http://blog.5

从上传头像 看用户行为 合理设置 头像程序

通过一段时间的发现,有98%的用户选择上传自己的照片,而非调用摄像头直接拍摄. 目标: 1.审核队列 2.不影响原有的用户系统. 3.把不相关的头像删除掉. 流程图:用户上传头像至队列,1个用户只有1个队列,头像图片设置为用户id,那么如果有新的头像上传会覆盖掉原有的头像. 所以头像数量是用户的2倍数.1原有头像.2新的头像.新的头像审核通过,那么覆盖掉旧的头像. 数据库设计: 1.原有的用户系统中只有个头像字段. 2.头像队列有uid和新的用户头像和审核状态

WebUploader 案例【上传头像】

// html <div style="margin-top:34px;" id="box_avatar"> <!--用来存放文件信息--> <div style="float:left;height:115px;width:115px; margin-right:15px;"> <div class="imgWrap"> <img src="" id=

刚完成的一个上传头像模块,望指点(含详细代码)

file API,直接读取本地文件.fileAPI和JCrop的结合使用上传头像. 1.html部分 <input id="demo" type="file" name="file" onchange="showPic();"/> <img id="avatar" src="" style="width:200px"> 2.fileAPI预览图

Flask blog实战---上传头像功能

第一步:数据库的表单中新增用户头像这一字段models.py中 第二步:在编辑资料的表单中增加头像上传, avatar = FileField('头像') 第三步:在编辑资料的路由界面,添加用户提交头像的功能,参考博客 http://ncitycode.com/python/flask/2016/6/18/ UPLOAD_FOLDER = current_app.config['UPLOAD_FOLDER'] 这里我在config.py中设置的文件上传路径为 将数据库中头像存储的路径修改为 到这

匿名用户上传文件

实验2允许匿名用户上传文件 实验环境 在虚拟机Linux 6.5系统下需要2台Linux系统一台A作为服务端一条B作为测试客户端开启2台Linux系统. 实验目标 A作为服务端配置VSFTPD服务器实现FTP服务. B作为测试客户端验证服务器A的共享是否有效. 配置真实主机确保真实主机能ping通2台虚拟机. 实验步骤 1.  首先将A,B真实主机放到同一网段中为了以后实验方便配置永久起效的静态IP地址验证AB真实主机能否通信安装vsftpd服务并启动. 2.  修改vsftpd主配置文件使得匿

Discuz!NT Flash无法上传头像,点击上传后无任何反应

最近在对一个Discuz!NT论坛的老项目进行维护和二次开发,遇到了论坛无法上传头像的问题.在网上找了相当多的资料,发现解决的方法基本是无效的.虽然有的状况一样,但是没有解决方法,后来自己研究了下也总算是解决了这个问题. 首先说明下出现无法上传头像的具体症状,大概的症状有下面这几点: 使用Flash头像上传时,点击上传图片,然后显示“图片载入中,请稍后的提示信息”和上传进度的百分比,最后却是没有任何的反应. 网上有部分网友说到进度到10%就没有任何反应,其实只是部分情况,如果传大图片的话会显示其

Android基础之——startActivityForResult启动界面并返回数据,上传头像

在android应用的开发过程中,经常会出现启动一个界面后填写部分内容后带着数据返回启动前的界面,最典型的应用就是登录过程.在很多应用程序的模块中,都有"我的"这个模块,在未登录状态下点击其中的某一项,就会弹出登录界面,登录完成后回到我的界面,会显示一些登录后的数据,这个功能的实现就要用到startActivityForResult. 下面通过一个小demo来说明一下startActivityForResult的使用,以及在实际开发中的一些应用. demo的效果图如下: 主界面布局:

Jcrop+uploadify+php实现上传头像预览裁剪

最近由于项目需要,所以做了一个上传头像预览并且可以预览裁剪的功能,大概思路是上传的图片先保存到服务器,然后通过ajax从服务器获取到图片信息,再利用Jcrop插件进行裁剪,之后通过PHP获取到的四个裁切点的坐标进行裁剪. 首先看一下uploadify上传插件的API: uploader : uploadify.swf 文件的相对路径,该swf文件是一个带有文字BROWSE的按钮,点击后淡出打开文件对话框,默认值:uploadify.swf.script :   后台处理程序的相对路径 .默认值: