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

利用原生态NSURLConnection上传用户头像_第1张图片
第一方登录.png

看一下界面:

利用原生态NSURLConnection上传用户头像_第2张图片
登录界面.png
  • 服务器默认是的头像:


    利用原生态NSURLConnection上传用户头像_第3张图片
    服务器默认头像.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:

利用原生态NSURLConnection上传用户头像_第4张图片
打印结果.png
  • 说明登录成功了!

上传头像

  • 先看一下手机页面:
利用原生态NSURLConnection上传用户头像_第5张图片
上传头像.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;
    } 
    

最后,点击上传:

利用原生态NSURLConnection上传用户头像_第6张图片
上传成功.png
  • 我们去看一下服务器:成功上传头像!!!
利用原生态NSURLConnection上传用户头像_第7张图片
上传到服务器成功.png

你可能感兴趣的:(利用原生态NSURLConnection上传用户头像)