iOS中使用POST向服务器发送图片文件
2016-03-04 20:30
453 查看
#pragma mark -使用POST上传图片- //parmater:上传的参数 data:图片数据 name:保存后的文件名 -(void)sendPost2:(NSString *)urlStr parmater:(NSDictionary *)parm data:(NSData*)data name:(NSString *)fileName{ //初始化要上传的数据 NSMutableData *dataM = [NSMutableData data]; //准备工作(规定好了的格式),事先规定好分隔符TEST_FORM_BOUNDARY NSString *strTop=[NSString stringWithFormat:@"--%@\r\nContent-Disposition: form-data; name=\"file\"; filename=\"%@\"\r\nContent-Type: %@\r\n",TEST_FORM_BOUNDARY,fileName,@"image/png"]; NSLog(@"%@",strTop); [dataM appendData:BXEncode(strTop)]; [dataM appendData:BXEncode(@"\r\n")]; [dataM appendData:data]; [dataM appendData:BXEncode(@"\r\n")]; //遍历一遍字典参数,用block形式执行,会自动分配到多核cpu上运行 [parm enumerateKeysAndObjectsUsingBlock:^(id _Nonnull key, id _Nonnull obj, BOOL * _Nonnull stop) { //参数开始的标志 NSString *boundry = [NSString stringWithFormat:@"--%@\r\n",TEST_FORM_BOUNDARY]; [dataM appendData:BXEncode(boundry)]; NSString *disposition = [NSString stringWithFormat:@"Content-Disposition: form-data; name=\"%@\"\r\n", key]; [dataM appendData:BXEncode(disposition)]; [dataM appendData:BXEncode(@"\r\n")]; [dataM appendData:BXEncode(obj)]; [dataM appendData:BXEncode(@"\r\n")]; }]; //尾部的分隔符 NSString *strBottom = [NSString stringWithFormat:@"--%@--\r\n",TEST_FORM_BOUNDARY]; [dataM appendData:BXEncode(strBottom)]; //请求设置 NSURL *url = [NSURL URLWithString:urlStr]; NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; [request setHTTPMethod:@"POST"]; [request setHTTPBody:dataM]; //设置上传数据的长度及格式 [request setValue:[NSString stringWithFormat:@"%lu",(unsigned long)dataM.length] forHTTPHeaderField:@"Content-Length"]; [request setValue:[NSString stringWithFormat:@"multipart/form-data; boundary=%@",TEST_FORM_BOUNDARY] forHTTPHeaderField:@"Content-Type"]; //上传 NSURLSession *session = [NSURLSession sharedSession]; NSURLSessionUploadTask *task = [session uploadTaskWithRequest:request fromData:dataM completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) { if (!error && data) { NSLog(@"response:%@",response); NSLog(@"data:%@",[[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding]); }else{ NSLog(@"error:%@",error); } }]; [task resume]; }
相关文章推荐
- iOS 高级绘图之路径剪切
- IOS 开发 之 NSFileManager
- IOS 开发 之 沙盒机制
- iOS中使用NSURLSession上传字符串
- iOS监听拨打电话回调函数
- iOS经常使用的加密算法
- ios tableView reload不是异步
- iOS单例模式
- iOS 多线程 performSelector 与 NSInvocation的使用——iOS 编码复习(三)(多线程1)
- ios 进阶 -- 开机视频
- IOS dispatch_once
- 【Xamarin挖墙脚系列:Xamarin.IOS机制原理剖析】
- IOS结合hessian实现远程调用
- iOS中打印日志显示系统详细时间,类名,行号及打印值
- iOS Block循环引用精讲
- iOS 常量的最佳使用方法
- iOS Remote Control
- iOS 过渡动画的实现
- iOS-添加新手操作指引
- iOS开发 之 可穿戴设备 蓝牙4.0 BLE 开发