数据+文件混合上传

来源:互联网 发布:豆瓣阅读知乎 编辑:程序博客网 时间:2024/04/28 07:37
-(void)PostImagesToServer:(NSString *) strUrl jsonPostParams:(NSString *)params object:(id) object{    //分界线的标识符        NSString *TWITTERFON_FORM_BOUNDARY = @"AaB03x";        //根据url初始化request        NSURL *url = [NSURL URLWithString:strUrl];        NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];        //分界线 --AaB03x        NSString *MPboundary=[[NSString alloc]initWithFormat:@"--%@",TWITTERFON_FORM_BOUNDARY];        //结束符 AaB03x--        NSString *endMPboundary=[[NSString alloc]initWithFormat:@"%@--",MPboundary];                //http body的字符串            NSMutableString *body=[[NSMutableString alloc]init];                //添加分界线,换行                [body appendFormat:@"%@\r\n",MPboundary];                //添加字段名称,换2行                [body appendFormat:@"Content-Disposition: form-data; name=\"credit_pre_pot_sum\"\r\n\r\n"];                //添加字段的值                [body appendFormat:@"%@\r\n",params];        //声明myRequestData,用来放入http body    NSMutableData *myRequestData=[NSMutableData data];        //将body字符串转化为UTF8格式的二进制        [myRequestData appendData:[body dataUsingEncoding:NSUTF8StringEncoding]];        //判断类型(NSData/NSDictionary)        if([object isKindOfClass:[NSData class]]){        NSData *dicImage = object;        NSMutableString *imgbody = [[NSMutableString alloc] init];                //此处循环添加图片文件                ////添加分界线,换行                [imgbody appendFormat:@"%@\r\n",MPboundary];                [imgbody appendFormat:@"Content-Disposition: form-data; name=\"file_data\"; filename=\"哈哈.jpg\"\r\n"];                //声明上传文件的格式                [imgbody appendFormat:@"Content-Type: image/jpeg; charset=utf-8\r\n\r\n"];                        //将body字符串转化为UTF8格式的二进制                [myRequestData appendData:[imgbody dataUsingEncoding:NSUTF8StringEncoding]];                //将image的data加入                [myRequestData appendData:dicImage];                [myRequestData appendData:[ @"\r\n" dataUsingEncoding:NSUTF8StringEncoding]];    }    else if ([object isKindOfClass:[NSString class]]){        NSString *jsonString = (NSString *)object;        //http body的字符串                NSMutableString *body=[[NSMutableString alloc]init];                        //添加分界线,换行                [body appendFormat:@"%@\r\n",MPboundary];                //添加字段名称,换2行                [body appendFormat:@"Content-Disposition: form-data; name=\"file_data\"\r\n\r\n"];                //添加字段的值                [body appendFormat:@"%@\r\n",jsonString];                //将body字符串转化为UTF8格式的二进制                [myRequestData appendData:[body dataUsingEncoding:NSUTF8StringEncoding]];    }    else{        NSDictionary *dic = (NSDictionary *)object;        //http body的字符串                NSMutableString *body=[[NSMutableString alloc]init];                        //添加分界线,换行                [body appendFormat:@"%@\r\n",MPboundary];                //添加字段名称,换2行                [body appendFormat:@"Content-Disposition: form-data; name=\"file_data\"\r\n\r\n"];                //添加字段的值                CJSONSerializer *serializer = [[CJSONSerializer alloc] init];        NSString *jsonString = [serializer serializeDictionary:dic];                [body appendFormat:@"%@\r\n",jsonString];                //将body字符串转化为UTF8格式的二进制                [myRequestData appendData:[body dataUsingEncoding:NSUTF8StringEncoding]];    }            //声明结束符:--AaB03x--        NSString *end=[[NSString alloc]initWithFormat:@"%@\r\n",endMPboundary];        //加入结束符--AaB03x--        [myRequestData appendData:[end dataUsingEncoding:NSUTF8StringEncoding]];        //设置HTTPHeader中Content-Type的值        NSString *content=[[NSString alloc]initWithFormat:@"multipart/form-data; boundary=%@",TWITTERFON_FORM_BOUNDARY];        //设置HTTPHeader        [request setValue:content forHTTPHeaderField:@"Content-Type"];        //设置Content-Length        [request setValue:[NSString stringWithFormat:@"%lu", (unsigned long)[myRequestData length]] forHTTPHeaderField:@"Content-Length"];        //设置http body        [request setHTTPBody:myRequestData];        //http method        [request setHTTPMethod:@"POST"];        //设置接受请求头信息    [request setValue:cmd forHTTPHeaderField:@"cmd"];    [request setValue:ppc forHTTPHeaderField:@"ppc"];    [request setValue:@"01" forHTTPHeaderField:@"dev"];    [request setValue:@"1.0" forHTTPHeaderField:@"protocol-ver"];    [request setValue:@"2013112599" forHTTPHeaderField:@"time-stamp"];    [request setValue:@"no1" forHTTPHeaderField:@"msg-id"];    [request setValue:@"hdyjhbhuyjhdyjhbhuyjhdyjhbhuyjqq" forHTTPHeaderField:@"md"];            if(!_session){        self.session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration] delegate:self delegateQueue:nil];        self.session.sessionDescription = @"upLoad";    }        self.upLoadTask = [_session uploadTaskWithRequest:request fromData:myRequestData completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {        if(error){            NSLog(@"---请求出错%@",error.localizedDescription);        }        else{                        NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *)response;            NSInteger status = [httpResponse statusCode];            if(status == 200){                NSDictionary *dictionary = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil];                NSLog(@"请求成功----%@",dictionary);                                //请求成功                NSLog(@"---response:%@",response);                NSString *asd = [httpResponse.allHeaderFields objectForKey:@"h-msg"];                                NSString *decodedString  = (__bridge_transfer NSString *)CFURLCreateStringByReplacingPercentEscapesUsingEncoding(NULL,                                                                                                                                 (__bridge CFStringRef)asd,                                                                                                                                 CFSTR(""),                                                                                                                                 CFStringConvertNSStringEncodingToEncoding(NSUTF8StringEncoding));                NSLog(@"---h_msg:%@",decodedString);            }        }    }];    [self.upLoadTask resume];}

实现多数据+多图片混合上传到话,写个for语句就好比如:

for(int i=0;i<图片流数组.count;i++){                NSData *dicImage = (NSData *)[[图片流数组] objectAtIndex:i];                [imgbody appendFormat:@"%@\r\n",MPboundary];                                [imgbody appendFormat:@"Content-Disposition: form-data; name=\"file_data\"; filename=\"哈哈.jpg\"\r\n"];                                //声明上传文件的格式                                [imgbody appendFormat:@"Content-Type: image/jpeg; charset=utf-8\r\n\r\n"];                                                //将body字符串转化为UTF8格式的二进制                                [myRequestData appendData:[imgbody dataUsingEncoding:NSUTF8StringEncoding]];                                //将image的data加入                                [myRequestData appendData:dicImage];                                [myRequestData appendData:[ @"\r\n" dataUsingEncoding:NSUTF8StringEncoding]];            }


0 0
原创粉丝点击