Content-Type = multipart/form-data;
该种类型有固定的参数拼接格式
普通参数
--boundry\r\n
Content-Disposition: form-data; name=\"%@\"\r\n
\r\n
value
\r\n
文件参数
--boundry\r\n
Content-Disposition:form-data; name=\"%@\"; filename=\"%@\"\r\nContent-Type: %@\r\n
\r\n
data
\r\n
参数结尾
--boundry--\r\n
其中
name 即为表单请求字段(服务端要的参数字段),fileName为保存在服务端的文件名字,Content-Type为文件类型(image/png 或者video/mpeg4等等),具体可以查看Content-Type参照表
这里着重说下即使服务端要参数是int类型,这里也必须普通参数也必须是字符串对象
#pragma makr -- 上传图片到服务器 -(void)sendImageWithImage:(UIImage *)img{ NSData *imageData; NSString *imageFormat; if (UIImagePNGRepresentation(img) != nil) { imageFormat = @"Content-Type: image/png \r\n"; imageData = UIImagePNGRepresentation(img); }else{ imageFormat = @"Content-Type: image/jpeg \r\n"; imageData = UIImageJPEGRepresentation(img, 1.0); } NSURL *url = [NSURL URLWithString:@"http://192.168.0.254:1010/AddImage.ashx"]; NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; request.HTTPMethod = @"POST"; //设置请求实体 NSMutableData *body = [NSMutableData data]; ///文件参数 [body appendData:[self getDataWithString:@"--BOUNDARY\r\n" ]]; NSString *disposition = [NSString stringWithFormat:@"Content-Disposition: form-data; name=\"%@\"; filename=\"%@.jpg\"\r\n",_myModel.personID,_myModel.personID]; [body appendData:[self getDataWithString:disposition ]]; [body appendData:[self getDataWithString:imageFormat]]; [body appendData:[self getDataWithString:@"\r\n"]]; [body appendData:imageData]; [body appendData:[self getDataWithString:@"\r\n"]]; //普通参数 [body appendData:[self getDataWithString:@"--BOUNDARY\r\n" ]]; //上传参数需要key: (相应参数,在这里是_myModel.personID) NSString *dispositions = [NSString stringWithFormat:@"Content-Disposition: form-data; name=\"%@\"\r\n",@"key"]; [body appendData:[self getDataWithString:dispositions ]]; [body appendData:[self getDataWithString:@"\r\n"]]; [body appendData:[self getDataWithString:_myModel.personID]]; [body appendData:[self getDataWithString:@"\r\n"]]; //参数结束 [body appendData:[self getDataWithString:@"--BOUNDARY--\r\n"]]; request.HTTPBody = body; //设置请求体长度 NSInteger length = [body length]; [request setValue:[NSString stringWithFormat:@"%ld",length] forHTTPHeaderField:@"Content-Length"]; //设置 POST请求文件上传 [request setValue:@"multipart/form-data; boundary=BOUNDARY" forHTTPHeaderField:@"Content-Type"]; NSURLSession *session = [NSURLSession sharedSession]; NSURLSessionDataTask *dataTask = [session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) { NSJSONSerialization *object = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableLeaves error:nil]; NSDictionary *dict = (NSDictionary *)object; NSLog(@"=====%@",[dict objectForKey:@"success"]); }]; //开始任务 [dataTask resume]; //运用AFN实现照片上传 // AFHTTPSessionManager *manager = [AFHTTPSessionManager manager]; // NSDictionary *dict = @{@"key":_myModel.personID}; // [manager POST:@"http://192.168.0.254:1010/AddImage.ashx" parameters:dict constructingBodyWithBlock:^(id<AFMultipartFormData> _Nonnull formData) { // [formData appendPartWithFileData:imageData name:_myModel.personID fileName:[NSString stringWithFormat:@"%@.jpg",_myModel.personID] mimeType:@"image/jpeg"]; // } progress:^(NSProgress * _Nonnull uploadProgress) { // // } success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) { // NSLog(@"--------%@",responseObject); // } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) { // // }]; } -(NSData *)getDataWithString:(NSString *)string{ NSData *data = [string dataUsingEncoding:NSUTF8StringEncoding]; return data; } 参考链接https://blog.csdn.net/shuai_summer/article/details/52066076,https://www.jianshu.com/p/a0e3c77d3164,https://blog.csdn.net/xiaozuo9437/article/details/54090386