如何在ios的xmpp服务器上上传个人资料图片?

Posted

技术标签:

【中文标题】如何在ios的xmpp服务器上上传个人资料图片?【英文标题】:how to upload profile picture on xmpp server in ios? 【发布时间】:2016-11-26 06:50:30 【问题描述】:
 filePath = [Imagesdatapath1 stringByAppendingPathComponent:[NSString stringWithFormat:@"%@",imageName]];
 NSError *errror;
   NSData *pngData = UIImagePNGRepresentation(resizedImage);


 NSXMLElement *vCardXML = [NSXMLElement elementWithName:@"vCard" xmlns:@"vcard-temp"];
 NSXMLElement *photoXML = [NSXMLElement elementWithName:@"PHOTO"];
 NSXMLElement *typeXML = [NSXMLElement elementWithName:@"TYPE" stringValue:@"image/jpg"];


  NSString *strEncoded = [Base64 encode:pngData];

  NSXMLElement *binvalXML = [NSXMLElement elementWithName:@"BINVAL" stringValue:strEncoded];

 [photoXML addChild:typeXML];
 [photoXML addChild:binvalXML];
 [vCardXML addChild:photoXML];

 XMPPvCardTemp *myvCardTemp = [XMPPvCardTempModule myvCardTemp];

 if (myvCardTemp) 
    [myvCardTemp setPhoto:pngData];
    [ XMPPvCardTempModule updateMyvCardTemp:myvCardTemp];
 

     [pngData writeToFile:filePath atomically:YES];

 [[NSUserDefaults standardUserDefaults] setObject:Imagesdatapath1 forKey:@"primagepath"];
   [[NSUserDefaults standardUserDefaults] synchronize];

     [self uploadProfileImage:filePath];

请参阅上面的代码,我正在开发聊天应用程序。不知道xmpp图片上传头像的概念。我想在xmpp 服务器和本地数据库上上传个人资料图片(头像)。所以,我是导入像Base64XMPPvCardTempModule 这样的库,但是直到它给出了这么多库错误,V 卡呢。

【问题讨论】:

我要添加多少个库。请一步一步说,以便我可以轻松完成。 【参考方案1】:

1) 首先,从相机或图库中选择图像并将其调整为所需的形式:

NSData *img = [NSData dataWithData:UIImagePNGRepresentation(resizedImage)];

2) 将您的 XMPP 值如下:

            NSXMLElement *vCardXML = [NSXMLElement elementWithName:@"vCard" xmlns:@"vcard-temp"];
            NSXMLElement *jidElement = [NSXMLElement elementWithName:@"JABBERID" objectValue:"your_jabberid_here"];
            NSXMLElement *profileUrlElement = [NSXMLElement elementWithName:@"PROFILEURL" stringValue:"server_file_path_of_image"];
            NSXMLElement *emailElement = [NSXMLElement elementWithName:@"EMAIL"];
            NSXMLElement *userIdElement = [NSXMLElement elementWithName:@"USERID" objectValue:"optional_if_you_want_set_email_id"];
            NSXMLElement *userNickname = [NSXMLElement elementWithName:@"NICKNAME" objectValue:"your_nickName_here"];

3) 将每个 NSXMLElement 标签添加到 vCard 中,如下所示:

        [emailElement addChild:userIdElement];
        [emailElement addChild:[NSXMLElement elementWithName:@"INTERNET"]];
        [emailElement addChild:[NSXMLElement elementWithName:@"PREF"]];
        [vCardXML addChild:jidElement];
        [vCardXML addChild:emailElement];
        [vCardXML addChild:profileUrlElement];
        [vCardXML addChild:userNickname];

4) 最后更新您的 vCard,如下所示:

XMPPvCardTemp *newvCardTemp = [XMPPvCardTemp vCardTempFromElement:vCardXML];
            [newvCardTemp setPhoto:img];
            [self->xmppvCardTempModule updateMyvCardTemp:newvCardTemp];

您可以通过以下方式查看新设置的电子名片照片:

 XMPPvCardCoreDataStorage *  xmppvCardStorage = [XMPPvCardCoreDataStorage sharedInstance];
  XMPPvCardTempModule * xmppvCardTempModule = [[XMPPvCardTempModule alloc] initWithvCardStorage:xmppvCardStorage];
    [xmppvCardTempModule  activate:[self xmppStream]];
   XMPPvCardTemp * vcard = [xmppvCardTempModule vCardTempForJID:[XMPPJID jidWithString:"your_jid_here" shouldFetch:YES];
    if (vcard.photo) 

        // YOUR_code_goes_here //
    

【讨论】:

感谢 Budhabhooshan,此代码有助于使用更新 vcard 将附件配置文件图像保存在本地核心数据上,但是一旦我删除应用程序并返回,由于尚未上传,我无法获取图像- 请分享您的代码是将其上传到服务器还是将其添加到本地核心数据中?以及如何在服务器上上传图片?

以上是关于如何在ios的xmpp服务器上上传个人资料图片?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 xmpp aSmack android 中设置个人资料图片?

IOS如何防止下载的图片以编程方式缓存

注册新用户时如何上传用户头像到服务器?

用户如何在我的 codeigniter 注册表单上上传个人资料图片

视频从iOS设备上传为图片,如何正确上传

阿里Oss图片上传组件