美文网首页
文件上传设置请求体的数据格式

文件上传设置请求体的数据格式

作者: 莫_名 | 来源:发表于2016-09-20 20:10 被阅读0次
    
    /*******************************************/
    
    /*
     使用POST请求上传文件的过程
    
     1.需要设置请求头
     Content-Type:multipart/form-data; boundary=----WebKitFormBoundaryhBDKBUWBHnAgvz9c
    
     2.按照特定的格式拼接请求体
     ------WebKitFormBoundaryhBDKBUWBHnAgvz9c
     Content-Disposition: form-data; name="file"; filename="test.png"
     Content-Type: image/png
    
    
     ------WebKitFormBoundaryhBDKBUWBHnAgvz9c
     Content-Disposition: form-data; name="username"
    
     wendingding
     ------WebKitFormBoundaryhBDKBUWBHnAgvz9c--
    */
    
    /*******************************************/
    
    //请求体拼接格式
    //分隔符:----WebKitFormBoundaryhBDKBUWBHnAgvz9c
    
    //01.文件参数拼接格式
    /*
     --分隔符
     Content-Disposition:参数
     Content-Type:参数
     空行
     文件参数
     */
    
    //02.非文件拼接参数
    /*
     --分隔符
     Content-Disposition:参数
     空行
     非文件的二进制数据
     */
    
    //03.结尾标识
    //--分隔符--
    
    /*******************************************/
    
    #pragma mark--使用NSURLConnection进行文件上传
    #define Kboundary @"----WebKitFormBoundaryhBDKBUWBHnAgvz9c"
    #define KnewLine  [@"\r\n" dataUsingEncoding:NSUTF8StringEncoding]
    - (void)upload
    {
        //1.确定请求路径
        NSURL *url = [NSURL URLWithString:@"http://120.25.226.186:32812/upload"];
    
        //2.创建一个可变的请求对象
        NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
    
        //3.设置请求方式为POST
        request.HTTPMethod = @"POST";
    
        //4.设置请求头
        NSString *filed = [NSString stringWithFormat:@"multipart/form-data; boundary=%@",Kboundary];
        [request setValue:filed forHTTPHeaderField:@"Content-Type"];
    
        //5.设置请求体
        NSMutableData *data = [NSMutableData data];
        //5.1 文件参数
        /*
         --分隔符
         Content-Disposition:参数
         Content-Type:参数
         空行
         文件参数
         */
        [data appendData:[[NSString stringWithFormat:@"--%@",Kboundary] dataUsingEncoding:NSUTF8StringEncoding]];
        [data appendData:KnewLine];
        [data appendData:[@"Content-Disposition: form-data; name=\"file\"; filename=\"test.png\"" dataUsingEncoding:NSUTF8StringEncoding]];
        [data appendData:KnewLine];
        [data appendData:[@"Content-Type: image/png" dataUsingEncoding:NSUTF8StringEncoding]];
        [data appendData:KnewLine];
    //    [data appendData:KnewLine];
        [data appendData:KnewLine];
    
        UIImage *image = [UIImage imageNamed:@"test"];
        NSData *imageData = UIImagePNGRepresentation(image);
        [data appendData:imageData];
        [data appendData:KnewLine];
    
        //5.2 非文件参数
        /*
         --分隔符
         Content-Disposition:参数
         空行
         非文件参数的二进制数据
         */
    
        [data appendData:[[NSString stringWithFormat:@"--%@",Kboundary] dataUsingEncoding:NSUTF8StringEncoding]];
    
        [data appendData:KnewLine];
        [data appendData:[@"Content-Disposition: form-data; name=\"username\"" dataUsingEncoding:NSUTF8StringEncoding]];
        [data appendData:KnewLine];
    //    [data appendData:KnewLine];
        [data appendData:KnewLine];
    
        NSData *nameData = [@"wendingding" dataUsingEncoding:NSUTF8StringEncoding];
        [data appendData:nameData];
        [data appendData:KnewLine];
    
        //5.3 结尾标识
        //--分隔符--
        [data appendData:[[NSString stringWithFormat:@"--%@--",Kboundary] dataUsingEncoding:NSUTF8StringEncoding]];
    //    [data appendData:KnewLine];
    
        request.HTTPBody = data;
    
        //6.发送请求
        [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse * __nullable response, NSData * __nullable data, NSError * __nullable connectionError) {
    
            //需要多做一层判断,程序容错处理
            //判断网络请求是否成功(考虑到是否有网,是否请求超时等等情况)
            if (connectionError == nil) {
                //7.解析服务器返回的数据
                NSLog(@"%@",[NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil]);
            }else
            {
                NSLog(@"网络请求失败%@",connectionError);
            }
        }];
    }
    
    

    相关文章

      网友评论

          本文标题:文件上传设置请求体的数据格式

          本文链接:https://www.haomeiwen.com/subject/eamoettx.html