IOS之上传图片
来源:互联网 发布:人工智能产品代理 编辑:程序博客网 时间:2024/05/01 20:05
IOS图片上传功能实现总结
IOS图片上传主要分两种方式实现,一个是将图片信息以表单的形式上传,一种是将图片以JSON的格式上传。
首先要讲的是以这两个方式上传的一个比较明显的区别就是HTTP Header是如何标记的,以表单的形式上传时HTTP Header应该设置为multipart/form-data,以JSON格式上传时HTTP Header应该设置为application/json。
Content-Type: multipart/form-data; boundary=${bound}
Content-Type: application/json
了解了这些那我们在IOS项目中应该如何运用他们呢?
一、表单上传图片
//分界线的标识符 NSString *TWITTERFON_FORM_BOUNDARY = @"AaB03x"; //根据url初始化request NSMutableURLRequest* request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:url] cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:10]; //分界线 --AaB03x NSString *MPboundary=[[NSString alloc]initWithFormat:@"--%@",TWITTERFON_FORM_BOUNDARY]; //结束符 AaB03x-- NSString *endMPboundary=[[NSString alloc]initWithFormat:@"%@--",MPboundary]; //要上传的图片 UIImage *image=[params objectForKey:@"pic"]; //得到图片的data NSData* data = UIImagePNGRepresentation(image); //http body的字符串 NSMutableString *body=[[NSMutableString alloc]init]; //参数的集合的所有key的集合 NSArray *keys= [params allKeys]; //遍历keys for(int i=0;i<[keys count];i++) { //得到当前key NSString *key=[keys objectAtIndex:i]; //如果key不是pic,说明value是字符类型,比如name:Boris if(![key isEqualToString:@"pic"]) { //添加分界线,换行 [body appendFormat:@"%@\r\n",MPboundary]; //添加字段名称,换2行 [body appendFormat:@"Content-Disposition: form-data; name=\"%@\"\r\n\r\n",key]; //添加字段的值 [body appendFormat:@"%@\r\n",[params objectForKey:key]]; } } ////添加分界线,换行 [body appendFormat:@"%@\r\n",MPboundary]; //声明pic字段,文件名为boris.png [body appendFormat:@"Content-Disposition: form-data; name=\"pic\"; filename=\"boris.png\"\r\n"]; //声明上传文件的格式 [body appendFormat:@"Content-Type: image/png\r\n\r\n"]; //声明结束符:--AaB03x-- NSString *end=[[NSString alloc]initWithFormat:@"\r\n%@",endMPboundary]; //声明myRequestData,用来放入http body NSMutableData *myRequestData=[NSMutableData data]; //将body字符串转化为UTF8格式的二进制 [myRequestData appendData:[body dataUsingEncoding:NSUTF8StringEncoding]]; //将image的data加入 [myRequestData appendData:data]; //加入结束符--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:@"%d", [myRequestData length]] forHTTPHeaderField:@"Content-Length"]; //设置http body [request setHTTPBody:myRequestData]; //http method [request setHTTPMethod:@"POST"]; //建立连接,设置代理 NSURLConnection *conn = [[NSURLConnection alloc] initWithRequest:request delegate:self]; //设置接受response的data if (conn) { mResponseData = [[NSMutableData data] retain]; }
二、JSON上传图片
//根据url初始化request NSMutableURLRequest* request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:url] cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:10]; //要上传的图片 UIImage *image=[params objectForKey:@"pic"]; //得到图片的data NSData* data = UIImagePNGRepresentation(image); //base64编码 NSString *photoStr = [data base64Encoding]; //参数字典 NSDictionary *params = [[NSDictionary alloc] init]; [params setObject:@{@"avatar": photoStr} forKey:@"profile"]; NSData *myRequestData = [NSMutableData dataWithData:[NSJSONSerialization dataWithJSONObject:params options:NSJSONWritingPrettyPrinted error:nil]]; //设置http header[request.request setValue:@"application/json" forHTTPHeaderField:@"Content-type"]; [request.request setValue:@"application/json" forHTTPHeaderField:@"Accept"]; //设置http body [request setHTTPBody:myRequestData]; //http method [request setHTTPMethod:@"POST"]; //建立连接,设置代理 NSURLConnection *conn = [[NSURLConnection alloc] initWithRequest:request delegate:self]; //设置接受response的data if (conn) { mResponseData = [[NSMutableData data] retain]; }
0 0
- IOS之上传图片
- iOS 之图片上传
- iOS 图片上传之压缩
- iOS 之图片上传处理
- iOS开发之上传图片
- iOS开发-AFNetworking之上传图片音乐文件
- IOS应用开发之图片上传
- iOS开发之压缩,上传图片
- iOS开发之使用AFN上传图片
- iOS网络串行队列之图片上传
- iOS上传文件(图片)之AFNetworking 3.0上传文件上传图片
- iOS上传文件或base64(图片)之AFNetworking 3.0+上传文件上传图片
- iOS开发技巧之:iOS 视频图片压缩上传
- ios 上传图片
- IOS 上传图片
- ios 图片上传
- IOS 上传图片 ASIFormDataRequest
- ios http 上传图片
- maven的pom报maven-surefire-plugin却是的解决办法
- error C2664: strcpy : 不能将参数 2 从 CString 转换为 const char *;error C2440: “初始化”: 无法从“const wchar_t [15]”
- 让乌龟SVN(TortoiseSVN)提交时忽略bin和obj目录
- Unity 3D引擎:十大最火的插件推荐
- linux文件区分大小写,不方便在windows下面开发管理
- IOS之上传图片
- nginx与tomcat整合及其他模块化
- vs2010提示error C2440: “=”: 无法从“wchar_t *”转换为“char *”,求解
- 配置电信网通双线双IP
- arith.js
- fedora java applet显示中文为小方框
- 【计算机网络常见面试题】双绞线的线对
- 对数据窗指定行、列字段加保护,并加以着色
- event.keyCode