利用原生态NSURLConnection上传用户头像

第一方登录.png

看一下界面:

登录界面.png
  • 服务器默认是的头像:


    服务器默认头像.png

1、首先:我们利用导入 #import "AFNetworking.h"

  • 设置登录方法:
    利用:AFHTTPRequestOperationManager

     // ----- 登录方法
      AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
    
      // 参数 ---- 字典
      NSDictionary *param = @{@"username":_userTextField.text,@"password":_pwdTextField.text};
    
  • 发送一个GET 请求
    [manager GET:kLoginURL parameters:param success:^(AFHTTPRequestOperation *operation, id responseObject) {

     NSLog(@"%@",responseObject);// 打印输出结果(利用结果,才能写下面的key 的值!!!)
    
             NSString *code = responseObject[@"code"];// 这个看接口设计人员设计了。这里设计是code 
             NSString *message = responseObject[@"message"];
         [self showMessage:message];#pragma mark --- 如果登录成功
     if ([code isEqualToString:@"login_success"]) {// 根据son值判断是否登录成功
    
         // 跳到下一个界面
         AlbumViewController *albumVC = [[AlbumViewController alloc] init];
         UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:albumVC];
         // 好友相册 的返回按钮是 “注销”,不是返回。所以,要用 presentViewController
         [self presentViewController:nav animated:YES completion:^{
             _longBtn.enabled = YES;
         }];
         _longBtn.enabled = YES;
         
        }else {
         _longBtn.enabled = YES;
     }
      } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
    
       NSLog(@"%@",error);
    
       [self showMessage:@"网络连接发生错误!!"]; 
       _longBtn.enabled = YES;
      }];
    
  • 打印结果是一个JSON:

打印结果.png
  • 说明登录成功了!

上传头像

  • 先看一下手机页面:
上传头像.png
  • 利用原生态 NSURLConnection(后继会利用框架,更简单!!!)留意我封装的这个setHTTPBodyWithImage:boundary:方法。

      // 1.生成NSURL
      NSURL *url = [NSURL URLWithString:kUploadURL];
    
      // 2.生成可变的NSURLMutableRequest
      NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
    
      // 3.修改请求方式
      request.HTTPMethod = @"POST";
    
      // 4。设置请求头
      /**
           boundary: 是分隔符号,告诉服务器,我的请求体里用的就是就是这个分隔符,而且,拼接请求体也用到这个分隔符
       */
      //    [request setValue:@"multipart/form-data; boundary=Adifadlfzxfoiasdfqwer" forHTTPHeaderField:@"Content-Type"];
      NSString *boundary = @"Adifadlfzxfoiasdfqwer";// 这里是可以值是可以随便修改的
      [request setValue:[NSString stringWithFormat:@"multipart/form-data; boundary=%@",boundary] forHTTPHeaderField:@"Content-Type"];// 这些值是官方的不能乱修改
    
      // 5. 设置要上传的数据 拼接请求体
      request.HTTPBody = [self setHTTPBodyWithImage:_myImageView.image boundary:boundary];
    NSString *boundary = @"Adifadlfzxfoiasdfqwer";// 这里是可以值是可以随便修改的
      [request setValue:[NSString stringWithFormat:@"multipart/form-data; boundary=%@",boundary] forHTTPHeaderField:@"Content-Type"];// 那些值是官方的不能乱修改的
    
    
      // 6.�利用NSURLConnection连接网络,上传头像
      [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
      
      if (connectionError) {
          NSLog(@"connectionError:%@",connectionError);
      }else {
      
          // 先调试一下结果:看服务器返回的结果,然后,在解析!
          NSLog(@"%@",[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]);
          
          // 解析
          NSDictionary *jsonData = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];
          NSString *code = jsonData[@"code"];
          NSString *message = jsonData[@"message"];
          
          [self showMessage:message];
          _uploadBtn.selected = YES;
          
          if ([code isEqualToString:@"upload_file_ok"]) {
              // 头像上传成功
              NSLog(@"t头像上传成功");
          }else
          {
              // 头像上传失败
              NSLog(@"t头像上传失败!");
          }
          
      }
    }];
    

到这里可以打印结果调试了:

服务器返回成功.png
上传到服务器失败.png
  • // 封装 图片类型,供上面的方法使用:

  • 返回 是 NSData 类型

      - (NSData *)setHTTPBodyWithImage:(UIImage *)image boundary:(NSString *)boundary
    {
    
        /**
       Body格式,每行的结尾都需要\r\n换行
       --Adifadlfzxfoiasdfqwer
       Content-Disposition: form-data; name=headimage; filename=headimage.png
       Content-Type: image/png
       空行
       文件(如图片)
       --Adifadlfzxfoiasdfqwer--
       */
    
      // 创建第一行 \r\n
      NSString *line = [NSString stringWithFormat:@"--%@\r\n",boundary];
    
      // 追加第2行
      line = [line stringByAppendingFormat:@"Content-Disposition: form-data; name=headimage; filename=headimage.png\r\n"];
    
      // 追加第3行
      line = [line stringByAppendingFormat:@"Content-Type: image/png\r\n"];
    
      // 追加第4行
      line = [line stringByAppendingFormat:@"\r\n"];
    
      // 把以上内容转化为可变的NSMutaleData
      // 生成一个不可变的 NSData
      NSData *data = [line dataUsingEncoding:NSUTF8StringEncoding];
    
      NSMutableData *bufData = [[NSMutableData alloc] initWithData:data];
    
      // 把图片变成 NSData
    NSData *imgData = UIImagePNGRepresentation(image);
    
    // 追加第5行
    [bufData appendData:imgData];
    
    // 追加换行符 \r\n
    [bufData appendData:[@"\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
    
    // 追加第6行
    //    [NSString stringWithFormat:@"--%@--",boundary]
    [bufData appendData:[[NSString stringWithFormat:@"--%@--",boundary] dataUsingEncoding:NSUTF8StringEncoding]];
    
      return bufData;
    } 
    

最后,点击上传:

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

推荐阅读更多精彩内容

  • 218.241.181.202 wxhl60 123456 192.168.10.253 wxhl66 wxhl6...
    CYC666阅读 1,361评论 0 6
  • iOS开发系列--网络开发 概览 大部分应用程序都或多或少会牵扯到网络开发,例如说新浪微博、微信等,这些应用本身可...
    lichengjin阅读 3,637评论 2 7
  • 由于iOS无法通过html表单来上传图片,因此想要上传图片,必须实现http请求,而不能像其他语言那样通过html...
    成语笔记阅读 19,558评论 0 2
  • 小文件下载如果文件比较小,下载方式会比较多直接用NSData的+ (id)dataWithContentsOfUR...
    醉叶惜秋阅读 850评论 0 0
  • 1、说出真相 “我是神及其力量的临在,这一切都是我创造的,这不是真的,这是虚构的全息幻象,这是我的意识创造出来的。...
    感恩的罗莉阅读 342评论 0 2