iOS头像上传(多图上传)

刚做了头像上传,下面把整个流程走一遍,希望共同学习,共同进步!

  • 1.首先调用手机系统相册或者摄像头,然后获取到图片,最后把获取的图片上传到服务器!
  • 2.应该在上传至服务器成功之后保存头像,并更新显示用户头像,这是整个大致结构!

下面我们看demo(本文用UIImagePickerController类上传头像):
首先创建一个全局的UIImagePickerController对象 pickerController 然后初始化对象:

这时候要牵几个代理

<UIActionSheetDelegate,UIImagePickerControllerDelegate,UINavigationControllerDelegate>

然后点击头像开始上传头像,我给头像加了一个手势,点击后跳转到手势方法:

#pragma mark ============手势方法==============
- (void)tapImageHead{
    //初始化pickerController
    pickerController = [[UIImagePickerController alloc] init];
    pickerController.view.backgroundColor = [UIColor orangeColor];
    pickerController.delegate = self;
    pickerController.allowsEditing = YES;
    NSLog(@"点击了头像要修改呦!");
    
    UIActionSheet *actionSheet = [[UIActionSheet alloc]initWithTitle:nil delegate:self cancelButtonTitle:@"取消" destructiveButtonTitle:@"拍照" otherButtonTitles:@"从相册中选择", nil];
    actionSheet.frame = CGRectMake(0.f, 0.f, Screen_Width, Screen_Height);
     actionSheet.actionSheetStyle = UIBarStyleBlackOpaque;
    [actionSheet showInView:[UIApplication sharedApplication].keyWindow];
}

这时候会出来下面图片样式:

sheetAlert.png

点击任何一个按钮都会走他的代理方法如下:

#pragma mark ================UIActionSheetDelegate========

- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex
{
    if (buttonIndex == 0) {//相机
        if([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera])
        {
            NSLog(@"支持相机");
            pickerController.sourceType = UIImagePickerControllerSourceTypeCamera;
            [self.viewController presentViewController:pickerController animated:YES completion:nil];
        }else{
            UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"提示" message:@"请在设置-->隐私-->相机,中开启本应用的相机访问权限!!" delegate:self cancelButtonTitle:@"取消" otherButtonTitles:@"我知道了", nil];
            [alert show];
        }
    }else  if (buttonIndex == 1){//图片库
        if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypePhotoLibrary])
        {
            NSLog(@"支持图库");
            pickerController.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
            [self.viewController presentViewController:pickerController animated:YES completion:nil];
        }else{
            UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"提示" message:@"请在设置-->隐私-->照片,中开启本应用的相机访问权限!!" delegate:self cancelButtonTitle:@"取消" otherButtonTitles:@"我知道了", nil];
            [alert show];
        }
    }
}
#pragma mark =============UIImagePickerControllerDelegate=======
//用户点击取消退出picker时候调用
- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker
{
    NSLog(@"%@",picker);
    [picker dismissViewControllerAnimated:YES completion:^{
        }];
}

//这里是用户选中图片(照相后的使用图片或者图库中选中图片)时调用
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
    NSLog(@"%s,info == %@",__func__,info);
    UIImage *image = [info objectForKey:@"UIImagePickerControllerOriginalImage"];
    [picker dismissViewControllerAnimated:YES completion:^{ 
    }];
    [MBProgressHUD showMessage:@"上传中..." toView:[UIApplication sharedApplication].keyWindow];
    //照片上传
    [self upDateHeadIcon:image];
}

以上就是获取头像(照相或者图库中)的整个流程,下面就是获取到图片后的上传过程,这个要和后台定义好,具体流程见下图:

interfaceHeaderImage2.png

注:红色箭头是一个参数和后台定好的!

注:红色箭头是一个参数和后台定好的!

注:红色箭头是一个参数和后台定好的!

在iOS8.2系统上发现一个bug,就是摄像头第二次调用时,打开是黑屏,没错就是黑屏,然后我测了微信,京东钱包等都一样是黑屏!是黑屏!是黑屏!
然后测试了一下iOS9系统,都是正常的
网上查stackOverflow中说有解决方法,然并卵!
这个我依然没有解决,哪位解决了可以和我说下

多图上传:

整体和头像上传没有什么区别,只是把接口改了一下下面上代码:


- (void)buttonActionPulish{
    //开始发帖
    /*
     uid    true    Long    用户标识
     tid    false   Long    主题帖子标示
     cid    False   Long    回复标示
     comment    true    String  回复内容
     attachment true    byte[]  附件
_selectedPhotos 为图片数组,是image对象数组
     */
    //内容判断
    if (self.reportStateTextView.text.length == 0 ){
        [MBProgressHUD showError:@"内容不能为空"];
        return;
    }
    //上传用户多图接口
    NSString *url = [NSString stringWithFormat:@"%@%@",APP_MGT,AZS_BBS_REPLY_BBS];
    NSMutableDictionary *params = [NSMutableDictionary dictionary];
    NSString *stringUid = [AZSPlistFile readObjectDictionaryFromePlist:USERINFO][@"uid"];
    [params setValue:stringUid forKey:@"uid"];
    [params setObject:self.tID forKey:@"tid"];//主题帖子标示
    if (self.cID != nil) {
        [params setObject:self.cID forKey:@"cid"];//回复贴标识
    }
    [params setObject:self.reportStateTextView.text forKey:@"comment"];//内容
    IMP_BLOCK_SELF(AZSCommunityReplyPostVC);
    [MBProgressHUD showMessage:@"回复中..." toView:self.navigationController.view];
    [AZSDataNetwork uploadWithURL:url params:params fileArray:_selectedPhotos name:@"attachment" fileName:@"fff.jpg" mimeType:@"image/jpeg/png" progress:^(NSProgress *progress) {
        NSLog(@"上传进度%@",progress);
    } success:^(NSURLSessionDataTask *task, id responseObject) {
        NSLog(@"上传成功了:%@",responseObject);
        [MBProgressHUD showSuccess:@"回复成功"];
        [MBProgressHUD hideAllHUDsForView: block_self.navigationController.view animated:YES];
        [block_self.navigationController popViewControllerAnimated:YES];
        if (block_self.delegate && [block_self.delegate respondsToSelector:@selector(replySuccess)]) {
            [block_self.delegate replySuccess];  
        }
    } fail:^(NSURLSessionDataTask *task, NSError *error) {
        NSLog(@"上传失败了:%@",error);
        [MBProgressHUD showError:@"网络错误"];
        [MBProgressHUD hideHUDForView: block_self.navigationController.view animated:YES];
    }]; 
}

针对部分网友提问我下面公开我网络上传图片的具体处理

多图上传.png.png

本文参考:

iOS学习:调用相机和相册,选择图片上传
iOS开发笔记:实现修改头像

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 200,667评论 5 472
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,361评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 147,700评论 0 333
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,027评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,988评论 5 361
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,230评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,705评论 3 393
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,366评论 0 255
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,496评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,405评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,453评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,126评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,725评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,803评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,015评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,514评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,111评论 2 341

推荐阅读更多精彩内容