今天项目里做一个上传图片等个人信息的时候,使用了第三方AFNetworking

- (AFHTTPRequestOperation *)POST:(NSString *)URLString

parameters:(id)parameters

constructingBodyWithBlock:(void (^)(id <AFMultipartFormData> formData))block

success:(void (^)(AFHTTPRequestOperation *operation, id responseObject))success

failure:(void (^)(AFHTTPRequestOperation *operation, NSError *error))failure;

但是一直都没有回调,服务器那边也接收不到请求,不知道怎么回事,于是写了一个原生的请求,有空再研究AF

- (void)postWithUrl:(NSString *)url params:(NSDictionary *)params imageData:(NSData *)imageData imageKeyword:(NSString *)imageKeywork fileName:(NSString *)fileName block:(void (^)(id responsObject, NSError *error))block

{

self.myBlock = block;

//创建可变请求

NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:url]];

//设置请求超时时间

[request setTimeoutInterval:60.0];

//创建HTTP body的字符串

NSMutableString *bodyString = [NSMutableString string];

//遍历所有字段

for (NSString *key in params) {

//添加分界线、换行符

[bodyString appendFormat:@"--%@\r\n",BOUNDARY];

//添加字段名称、换2行

[bodyString appendFormat:@"Content-Disposition: form-data; name=\"%@\"\r\n\r\n",key];

//添加字段的值、换行符

[bodyString appendFormat:@"%@\r\n",[params objectForKey:key]];

}

//添加分界线、换行符

[bodyString appendFormat:@"--%@\r\n", BOUNDARY];

//声明图片字段(imageKeyword为图片字段名,fileName为图片名)

[bodyString appendFormat:@"Content-Disposition: form-data; name=\"%@\"; filename=\"%@.png\"\r\n",imageKeywork,fileName];

//声明上传文件的格式、换2行

[bodyString appendString:@"Content-Type: image/png\r\n\r\n"];

//声明结束符

NSString *endString = [NSString stringWithFormat:@"\r\n--%@--\r\n",BOUNDARY];

//声明请求data,用来放入HTTP body

NSMutableData *bodyData = [[NSMutableData alloc] init];

//将body字符串转化为UTF8格式的二进制 加入bodyData

[bodyData appendData:[bodyString dataUsingEncoding:NSUTF8StringEncoding]];

//将图片的data 加入bodyData

[bodyData appendData:imageData];

//将结束符转化为UTF8格式的二进制 加入bodyData

[bodyData appendData:[endString dataUsingEncoding:NSUTF8StringEncoding]];

//设置HTTP Header 中 Content-Type 的值

[request addValue:[NSString stringWithFormat:@"multipart/form-data; boundary=%@",BOUNDARY] forHTTPHeaderField:@"Content-Type"];

//设置HTTP Header 中 Content-Length 的值

[request addValue:[NSString stringWithFormat:@"%ld",[bodyData length]] forHTTPHeaderField:@"Content-Length"];

//设置请求体

[request setHTTPBody:bodyData];

//设置请求方式(POST、GET)

[request setHTTPMethod:@"POST"];

[NSURLConnection connectionWithRequest:request delegate:self];

}

iOS 原生HTTP POST请求上传图片的更多相关文章

  1. iOS原生项目中集成React Native

    1.本文的前提条件是,电脑上已经安装了CocoaPods,React Native相关环境. 2.使用Xcode新建一个工程.EmbedRNMeituan [图1] 3.使用CocoaPods安装Re ...

  2. iOS原生地图开发进阶——使用导航和附近兴趣点检索

    iOS原生地图开发进阶——使用导航和附近兴趣点检索 iOS中的mapKit框架对国际化的支持非常出色.在前些篇博客中,对这个地图框架的基础用法和标注与覆盖物的添加进行了详细的介绍,这篇博客将介绍两个更 ...

  3. iOS美丽约网络请求分析

    网络请求分析html, body {overflow-x: initial !important;}html { font-size: 14px; } body { margin: 0px; padd ...

  4. 使用HTML5构建iOS原生APP(2)

    本文转载至 http://ju.outofmemory.cn/entry/18807 有时候我们在内嵌的webview中希望点击一个链接之后,触发iOS原生事件,而不是webview内页面跳转(因为w ...

  5. 使用iOS原生sqlite3框架对sqlite数据库进行操作

    摘要: iOS中sqlite3框架可以很好的对sqlite数据库进行支持,通过面向对象的封装,可以更易于开发者使用. 使用iOS原生sqlite3框架对sqlite数据库进行操作 一.引言 sqlit ...

  6. iOS 原生库对 https 的处理

    转载自:swift cafe 使用 NSURLSession NSURLSession 是 iOS 原生提供的网络处理库.它提供了丰富的接口以及配置选项,满足我们平时网络处理的大部分需求,同时它也支持 ...

  7. JS调用Android、Ios原生控件

    在上一篇博客中已经和大家聊了,关于JS与Android.Ios原生控件之间相互通信的详细代码实现,今天我们一起聊一下JS调用Android.Ios通信的相同点和不同点,以便帮助我们在进行混合式开发时, ...

  8. [调整] Firemonkey iOS 原生 Edit 透明框, 改变框色

    说明:iOS 原生 Edit 透明框 适用:Berlin Firemonkey 方法:在 StyleLookup 输入 transparentedit 效果: 如果有图片 Image 在这二个 Edi ...

  9. unity导出工程导入到iOS原生工程中详细步骤

    一直想抽空整理一下unity原生工程导入iOS原生工程中的详细步骤.做iOS+vuforia+unity开发这么长时间了.从最初的小小白到现在的小白.中间趟过了好多的坑.也有一些的小小收货.做一个喜欢 ...

随机推荐

  1. .NET平台开源项目速览(14)最快的对象映射组件Tiny Mapper

    好久没有写文章,工作甚忙,但每日还是关注.NET领域的开源项目.五一休息,放松了一下之后,今天就给大家介绍一个轻量级的对象映射工具Tiny Mapper:号称是.NET平台最快的对象映射组件.那就一起 ...

  2. dubbox微服务实例及引发的“血案”

    Dubbo 是阿里巴巴公司开源的一个高性能优秀的服务框架,使得应用可通过高性能的 RPC 实现服务的输出和输入功能,可以和 Spring框架无缝集成. 主要核心部件: Remoting: 网络通信框架 ...

  3. bcp 命令实例

    set sql_flow="select Id,',',ApplierName,',',FlowStatus,',',IsApproved,',',CreateTime from *** w ...

  4. JDBC增加删除修改

    一.配置程序--让我们程序能找到数据库的驱动jar包 1.把.jar文件复制到项目中去,整合的时候方便. 2.在eclipse项目右击"构建路径"--"配置构建路径&qu ...

  5. cocos2dx调用浏览器打开网址

    安卓端cocos2dx/platform/android路径下CCApplication.h: virtual void openURL(const char* pszUrl); CCApplicat ...

  6. 服务治理要先于SOA

      讲在前面的话: 若企业缺乏对服务变更的控制和规则,那么一个服务在经过几个项目之后,就很有可能被随意更改成多个版本,将来变成什么样更是无法预测.久而久之,降低了服务重用的可能性,提高了服务利用的成本 ...

  7. jQuery 的选择器常用的元素查找方法

    jQuery 的选择器常用的元素查找方法 基本选择器: $("#myELement")    选择id值等于myElement的元素,id值不能重复在文档中只能有一个id值是myE ...

  8. linux中kvm的安装及快照管理

    一.kvm的安装及状态查看 1.安装软件 yum -y install kvm virt-manager libvirt2.启动libvirtd 报错,升级device-mapper-libs yum ...

  9. [jquery]jquery正则表达式验证(手机号、身份证号、中文名称)

    数字判断方法:isNaN()函数 test()方法 判断字符串中是否匹配到正则表达式内容,返回的是boolean值 ( true / false ) // 验证中文名称 function isChin ...

  10. [DeviceOne开发]-手势动画示例分享

    一.简介 这是iOS下的效果,android下完全一致.通过do_GestureView组件和do_Animation组件,deviceone能很容易实现复杂的跨平台纯原生动画效果,这个示例就是通过手 ...