iOS上传图片有固定的格式
需要把图片的数据再request的HTTPBody中配置好
格式
/*
--Boundary+72D4CD655314C423 // 分割符,以“--”开头,后面的字随便写,只要不写中文即可
Content-Disposition: form-data; name="uploadFile"; filename="001.png" //这里一定要记住filename = “fghhj.jpg”一定要有扩展名jpg或者别的 这里注明服务器接收图片的参数(类似于接收用户名的userName)及服务器上保存图片的文件名
Content-Type:image/png // 图片类型为png
Content-Transfer-Encoding: binary // 编码方式
// 这里是空一行,必不可少!!
... contents of boris.png ... // 图片数据部分
--Boundary+72D4CD655314C423-- // 分隔符后面以"--"结尾,表明结束
*/
//上传图片 - (void)upLoadImage:(UIImage *)image requestURL:(NSString *)url Success:(SuccessBlock)success { NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:url]]; [self setMutableRequest:request WithImage:image]; UIActivityIndicatorView *activity = [[UIActivityIndicatorView alloc]initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge]; [self.view addSubview:activity]; activity.center = CGPointMake(self.view.bounds.size.width*0.5, self.view.bounds.size.height*0.5); [activity startAnimating]; NSURLSessionDataTask *task = [[NSURLSession sharedSession] dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) { [activity stopAnimating]; if (success) { if (data) { NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil]; success(dic); } else { [self showToast:@"上传失败"]; } } }]; [task resume]; } //拼接数据 - (void)setMutableRequest:(NSMutableURLRequest *)request WithImage:(UIImage *)image { //构造分界线 boundary NSString *boundary = [NSString stringWithFormat:@"upoad%d%d",arc4random(),arc4random()]; //图片数据 NSData *imageData = UIImagePNGRepresentation(image);/*(image, 1);*/ /* --Boundary+72D4CD655314C423 // 分割符,以“--”开头,后面的字随便写,只要不写中文即可 Content-Disposition: form-data; name="uploadFile"; filename="001.png" // 这里注明服务器接收图片的参数(类似于接收用户名的userName)及服务器上保存图片的文件名 Content-Type:image/png // 图片类型为png Content-Transfer-Encoding: binary // 编码方式 // 这里是空一行,必不可少!! ... contents of boris.png ... // 图片数据部分 --Boundary+72D4CD655314C423-- // 分隔符后面以"--"结尾,表明结束 */ //请求头 NSMutableString *topStr = [NSMutableString string]; // [topStr appendFormat:@"--%@\r\n",boundary]; // [topStr appendFormat:@"Content-Disposition: form-data; name=\"uploadFile\"; filename=\"%@\"\r\n",@"icon"]; // [topStr appendFormat:@"Content-Type:image/jpeg\r\n"]; // [topStr appendFormat:@"Content-Transfer-Encoding: binary\r\n\r\n"]; [topStr appendString:[NSString stringWithFormat:@"--%@\r\n",boundary]]; [topStr appendString:[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"uploadFile\"; filename=\"%@\"\r\n",@"icon.png"]]; [topStr appendString:[NSString stringWithFormat:@"Content-Type:image/png\r\n"]]; [topStr appendString:[NSString stringWithFormat:@"Content-Transfer-Encoding: binary\r\n\r\n"]]; //拼接数据 NSMutableData *requestBody = [NSMutableData data]; [requestBody appendData:[topStr dataUsingEncoding:NSUTF8StringEncoding]]; [requestBody appendData:imageData]; [requestBody appendData:[@"\r\n" dataUsingEncoding:NSUTF8StringEncoding]]; //结束部分 [requestBody appendData:[[NSString stringWithFormat:@"--%@--",boundary] dataUsingEncoding:NSUTF8StringEncoding]]; [request setHTTPMethod:@"POST"]; [request setHTTPBody:requestBody]; [request setValue:[NSString stringWithFormat:@"%zd", requestBody.length] forHTTPHeaderField:@"Content-Length"]; // 设置头部数据,指定了http post请求的编码方式为multipart/form-data(上传文件必须用这个)。 [request setValue:[NSString stringWithFormat:@"multipart/form-data; boundary=%@",boundary] forHTTPHeaderField:@"Content-Type"]; }
文件上传请求数据格式
部分文件的type
原文:http://www.cnblogs.com/feiyudexingfu/p/4892031.html