美文网首页
OC网络:文件上传

OC网络:文件上传

作者: cyh老崔 | 来源:发表于2015-12-10 20:17 被阅读449次

    其中KFileBoundary的名称可以自定义.

    
    #define KFileBoundary @"fanlu"
    #define KNewLine @"\r\n"
    #define KEncode(str) [str dataUsingEncoding:NSUTF8StringEncoding]
    
    
    - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
    {
        [self upload];
    }
    
    //基本构成为两个参数:文件参数与用户名参数.每个参数配置时的规则:先配置文件信息,再配置具体数据.
    /*
     参数1
     参数2
     结束标记
     */
    
    /*
     * 文件参数 :1.配置文件信息 2.配置具体文件数据
     fanlu
     Content-Disposition: form-data; name="参数名"; filename="文件名"
     Content-Type: 文件类型(MIMEType)
     
     文件具体数据
     
     * 非文件参数: 1.配置参数信息 2.配置具体参数值
     fanlu
     Content-Disposition: form-data; name="参数名"
     
     参数值
     */
    
    - (void)upload
    {
        // 1.请求路径
        NSURL *url = [NSURL URLWithString:@"http://192.168.15.172:8080/Server/upload"];
        
        // 2.创建一个POST请求
        NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
        request.HTTPMethod = @"POST";
        
        // 3.设置请求体
        NSMutableData *body = [NSMutableData data];
        
        // 3.1.文件参数
        [body appendData:KEncode(@"--")];
        [body appendData:KEncode(KFileBoundary)];
        [body appendData:KEncode(KNewLine)];
        
        [body appendData:KEncode(@"Content-Disposition: form-data; name=\"file\"; filename=\"test123.png\"")];
        [body appendData:KEncode(KNewLine)];
        
        [body appendData:KEncode(@"Content-Type: image/png")];
        [body appendData:KEncode(KNewLine)];
        
        [body appendData:KEncode(KNewLine)];
        UIImage *image = [UIImage imageNamed:@"minion_03"];
        NSData *imageData = UIImagePNGRepresentation(image);
        [body appendData:imageData];
        [body appendData:KEncode(KNewLine)];
        
        // 3.2.用户名参数
        [body appendData:KEncode(@"--")];
        [body appendData:KEncode(KFileBoundary)];
        [body appendData:KEncode(KNewLine)];
        
        //直接复制上述字符串,将filename及类型去掉.因为不是文件参数,所以不需要filename及类型
        [body appendData:KEncode(@"Content-Disposition: form-data; name=\"username\"")];
        [body appendData:KEncode(KNewLine)];
        
        [body appendData:KEncode(KNewLine)];
        [body appendData:KEncode(@"张三")];
        [body appendData:KEncode(KNewLine)];
        
        // 3.3.结束标记
        [body appendData:KEncode(@"--")];
        [body appendData:KEncode(KFileBoundary)];
        [body appendData:KEncode(@"--")];
        [body appendData:KEncode(KNewLine)];
        
        request.HTTPBody = body;
        
        // 4.设置请求头(告诉服务器这次传给你的是文件数据,告诉服务器现在发送的是一个文件上传请求)
        NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@", KFileBoundary];
        [request setValue:contentType forHTTPHeaderField:@"Content-Type"];
        
        // 5.发送请求
        [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
            NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableLeaves error:nil];
            NSLog(@"%@", dict);
        }];
    }
    

    相关文章

      网友评论

          本文标题:OC网络:文件上传

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