网络篇-NSURLConnection原生上传

简述:app

其实使用原生的NSURLConnection上传是一个很是哀伤的事情,要拼接无数次,而且多一个换行,一个空格,一个标点都不行,既严格,又shit 因此通常都是用的都是三方框架:AFNetwork,ASIHTTPRequest等,那么这里我就简简单单的写一下。框架

  • 一、首先无论什么,咱们要把最大的几部操做完成代码以下:
-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
    //由于文件比较大  咱们这里就使用POST了
    //一、肯定URL
    NSURL *url = [NSURL URLWithString:@"http://192.168.1.0:8080/upload"];
    //二、肯定请求   由于用POST请求,因此这里使用NSMutableURLRequest
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
    //2.一、 设置请求方式 post
    request.HTTPMethod = @"POST";


    //2.二、请求体个人拼一个会儿........
    //request.HTTPBody = ?;


    //三、发送请求
    [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse * _Nullable response, NSData * _Nullable data, NSError * _Nullable connectionError) {
        NSLog(@"%@",[[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding]);
    }];
}
  • 二、看完上面,那么咱们就剩下,最爽的一幕了,拼拼拼拼
    好了先看看这个图,上传文件和普通的POST请求不同,它多了一些这个,然而这里就有是须要咱们拼接的内容,分两部分
  • 上面的Content-Type是在咱们的请求头里面的
  • 下面的那些写红色字的就是咱们所请求 须要拼接的
  • 至于换多少行,我也一一的拼接出来了,大家拼接的话能够跟着下面的图一步一步拼接.post

代码:url

-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
    //由于文件比较大  咱们这里就使用POST了

    //一、肯定URL
    NSURL *url = [NSURL URLWithString:@"http://192.168.1.0:8080/upload"];

    //二、肯定请求
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
    /******************************************************************/
    //                          设置请求头
    [request setValue:@"multipart/form-data; boundary=----WebKitFormBoundaryUFNaH6losNxu4xDq" forHTTPHeaderField:@"Content-Type"];

    /******************************************************************/
    //                          设置请求体
    // 设置请求体
    // 给请求体加入固定格式数据  这里也是使用的也是可变的,由于多嘛
    NSMutableData *data = [NSMutableData data];
    /******************************************************************/
    //                       开始标记
    [data appendData:[@"------WebKitFormBoundaryUFNaH6losNxu4xDq" dataUsingEncoding:NSUTF8StringEncoding]];
    [data appendData:[@"\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
    [data appendData:[@"Content-Disposition: form-data; name=\"file\"; filename=\"Liiii.png\"" dataUsingEncoding:NSUTF8StringEncoding]];
    [data appendData:[@"\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
    [data appendData:[@"Content-Type: image/png" dataUsingEncoding:NSUTF8StringEncoding]];
    [data appendData:[@"\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
    [data appendData:[@"\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
    /******************************************************************/
    //                      上传文件参数
    //图片数据  而且转换为Data
    UIImage *image = [UIImage imageNamed:@"Liiii"];
    NSData *imagedata = UIImagePNGRepresentation(image);
    [data appendData:imagedata];
    [data appendData:[@"\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
    [data appendData:[@"\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
    /******************************************************************/
    //                       非文件参数
    [data appendData:[@"------WebKitFormBoundaryUFNaH6losNxu4xDq" dataUsingEncoding:NSUTF8StringEncoding]];
    [data appendData:[@"\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
    [data appendData:[@"Content-Disposition: form-data; name=\"username\"" dataUsingEncoding:NSUTF8StringEncoding]];
    [data appendData:[@"\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
    [data appendData:[@"\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
    [data appendData:[@"LitterL" dataUsingEncoding:NSUTF8StringEncoding]];
    [data appendData:[@"\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
    /******************************************************************/
    //                      添加结束标记
    [data appendData:[@"------WebKitFormBoundaryUFNaH6losNxu4xDq--" dataUsingEncoding:NSUTF8StringEncoding]];
    [data appendData:[@"\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
    /******************************************************************/

    //请求方式
    request.HTTPMethod = @"POST";
    //请求体
    request.HTTPBody = data;

    //三、发送请求
    [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse * _Nullable response, NSData * _Nullable data, NSError * _Nullable connectionError) {
        NSLog(@"%@",[[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding]);
    }];
}

补充:code

其实原生的只是拼接起来很是的麻烦,须要带一点细心,不过出bug真的要让人疯掉,你们能够尝试一下。orm

结束blog

本章到此结束
            欢迎各位码友随意转载并指正
相关文章
相关标签/搜索