IOS关于图片上传
2016-01-18 09:19
411 查看
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-- // 分隔符后面以"--"结尾,表明结束
*/
文件上传请求数据格式
![](http://images.cnitblog.com/blog/450136/201409/012024197666935.png)
部分文件的type
![](http://images.cnitblog.com/blog/450136/201409/012026327663036.png)
AFNetWorking 上传图片
需要把图片的数据再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)setMutableRequest:(NSMutableURLRequest *)request WithImage:(UIImage *)image Parameters:(NSDictionary *)paramerters { //构造分界线 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]; //如果有参数,一定要先弄参数的 NSMutableDictionary *mdic = paramerters.mutableCopy; [mdic setObject:[self getUserId] forKey:@"token"]; NSArray *keys = [mdic allKeys]; NSLog(@"%@",keys); for (int i = 0; i < keys.count; i++) { NSString *key = keys[i]; //添加分界线,换行 [topStr appendFormat:@"--%@\r\n",boundary]; //添加字段名称,换2行 [topStr appendFormat:@"Content-Disposition: form-data; name=\"%@\"\r\n\r\n",key]; //添加字段的值 [topStr appendFormat:@"%@\r\n",mdic[key]]; } NSLog(@"%@",topStr); // [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"]; }
文件上传请求数据格式
![](http://images.cnitblog.com/blog/450136/201409/012024197666935.png)
部分文件的type
![](http://images.cnitblog.com/blog/450136/201409/012026327663036.png)
AFNetWorking 上传图片
- (void)uploadImageWithUrl:(NSString *)url image:(UIImage *)image Parameters:(NSDictionary *)paramerters Success:(SuccessBlock)success ErrorBlock:(ErrorBlock)errorBlock { WS(ws); AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; AFHTTPRequestOperation *op = [manager POST:url parameters:nil constructingBodyWithBlock:^(id<AFMultipartFormData> _Nonnull formData) { NSMutableDictionary *mdic = paramerters.mutableCopy; [mdic setObject:[ws getUserId] forKey:@"token"]; //如果有参数 NSArray *keys = [mdic allKeys]; for (int i = 0; i < keys.count; i++) { NSString *key = keys[i]; NSString *content = mdic[key]; NSData *contenData = [content dataUsingEncoding:NSUTF8StringEncoding]; //调用这个方法 [formData appendPartWithFormData:contenData name:key]; } //配置图片 NSData *imageData = UIImagePNGRepresentation(image); NSDateFormatter *df = [[NSDateFormatter alloc]init]; df.dateFormat = @"YYYYMMddHHmmss"; NSString *fileName = [NSString stringWithFormat:@"%@.png",[df stringFromDate:[NSDate new]]]; [formData appendPartWithFileData:imageData name:@"myfile" fileName:fileName mimeType:@"image/png"]; } success:^(AFHTTPRequestOperation * _Nonnull operation, id _Nonnull responseObject) { if (success) { NSLog(@"%@",responseObject); } } failure:^(AFHTTPRequestOperation * _Nonnull operation, NSError * _Nonnull error) { NSLog(@"%@",error); }]; [op start]; }
相关文章推荐
- iOS 原生二维码扫描
- iOS开发中使用FMDB解决数据存储问题---(写的比较详细,仔细看,有很大的参考价值)
- iOS 9键盘类型合集
- IOS硬件解码VTDecompressionSession失效
- iOS应用分发与内测(二)
- iOS开发高手进阶之路
- IOS之多线程
- 在蜂窝教育iOS培训四个月,我改变了自己的未来
- iOS-地图定位、CLLocationManager简单使用
- IOS,十六进制颜色和RGB颜色的宏定义
- iOS--计算多行文本尺寸
- ios layout机制相关方法
- iOS第三方类库汇总【持续更新】
- iOS 调用系统相机和相册的功能
- How to use cocoa pod in your iOS project
- IOS开发中常用的知识点汇总
- iOS上传视频到服务器
- nagios监控端的安装
- iOS应用分发与内测(一)
- iOS上传语音到服务器