集思广益iOS学习引擎关注

客户端文件上传服务器看我就够了(支持14种文件格式上传)

2016-09-30  本文已影响1685人  iOSDevVicky

由于项目需求,要上传文件到服务器,以前也做过,但是两次所采用的协议有所不同.所以纠结了一天终于搞好了,而且文件格式支持14种.

先来看看后台商定的上传文件协议:HTTP multipart/form-data

如果你们公司后台也是接受这种协议上传文件的话,那么我可以说你已经完成了,因为我已经替你们填了一次这个坑了.啊哈哈哈哈.可能有点嚣张了.

那么支持的文件格式都有哪些了:txt、doc、xls、docx、xlsx、jpg、jpeg、gif、png、pdf、mp3、mp4、ppt、pptx

这么多的格式,应该能够满足你们的需求了。

如果还不够就联系我,或者自己去尝试尝试写写.毕竟路很长,还是要自己慢慢一步步走的.

好了废话不多说了,先说一下,我分别采用了AFNetworking3.1.0最新版本和AFNetworking2.6版本.分被采用AFHTTPRequestOperationManager,和AFHTTPSessionManager.是不是我做的很全面.

先说2.6版本的文件上传.看代码再BB

AFHTTPRequestOperationManager上传文件

文件上传接口

看到上面的代码,不明白是因为我将文件上传进行了封装,并且通过block进行回调,将成功和失败的结果带出.

先看需要的参数都有一个NSData类型,一个是KFileMineType类型,然后就没有了.

好了进入方法内部看看:

文件上传参数构建

看到第一个的时候可能有些同学不明白KFileMineType这个枚举到底是什么东西,不要慌继续往下看,你就会明白的.现在看这张图的第一句,我给字典写了一个分类,有一个mimeType方法,来获取一个字典,然后将枚举传入,最终这个字典会返回上传文件所需的参数mimeType和文件后缀名也就是.ppt等然后上传文件时,后台有时需要让你携带参数,但是我的这次是没有的所以就是nil,第二个适用于其他接口,所以在文件上传时也为nil,URL为上传文件的后台地址,cmd可能和你们就无关了,我们后台定义的而已一会你就知道干什么了.然后就是上传文件所需要的data和mimeType,fileType.成功和失败的blcok.

AFHTTPRequestOperationManager post请求参数

上面这段是上传文件时,第一个调用的方法,作用是来配置上传文件时post请求所携带的参数,这段大家可以省略,因为各个服务器的参数都不同所以,大家可以跳过这个方法,

再看下面这个方法的调用是创建AFHTTPRequestOperationManager,并且对responseSerializer

做出设置,代码如下

创建AFHTTPRequestOperationManager

if是我判断接口是不是上传文件.

设置请求头

然后就是开始请求上传图片的步骤了

上传图片的方法

af提供了上传的方法,我们只是添加一下上传文件然后上传就OK了.然后判断后台返回的code如果成功就将返回结果返回,如果失败就返回失败原因.

现在我们来看一下大家疑惑的那个枚举都是什么:

枚举

这个枚举其实代表的都是文件格式.

那么最后是如何将枚举转成字符串的啦.那就要大家移步到我定义的那个字典的分类中去看那个方法.

枚举转字符串1 美剧转字符传2

通过这个方法,我可以将传入的枚举值转换成我所需要的文件格式和mimetype,再通过字典返回.这样就完成了转换.那么还有人会问,你的这写个mimeType是怎么搞出来的.那么就在下面我会讲一下是怎么做的.我给字符串也谢了一个扩展.

获取mimetype

这个文件必须导入af,因为这个方法内部很多都是来自MobileCoreServices.framework.但是af中已经有了这个库,所以我们直接引入af就可以了.

看到这里基本的文件上传就完成了,包括14中文件格式.本人亲身测试过,都能完成文件上传.

AFHTTPRequestOperationManager的就讲完了,下面就是使用最新版的af上传文件,基本上都是相同的不同的地方只有网络请求这块发生不同.先看代码.

使用AFHTTPSessionManager上传文件

AFHTTPSessionManager文件上传

都只苹果放弃了NSURLConnect,引入了NSURLSession,这也是af最新版本的请求方式,采用session来发起网络请求.

换汤不换药,基本上都是类似的.代码就在上面,如果有需要可以参考一下.

好了上传文件,就说到这了.有什么不懂可以联系我.

如果喜欢小编,可以点击关注,我会不定期的更新一些文章,也可以关注我的专题

本人联系方式:qq:513961360

email:513961360@qq.com

也可以加我们的qq群希望能与朋友们一起聊天和学习.群里还有很多iOS开发者,帮助我们解决问题,并且同时学习.

qq群号:580284575

上一篇下一篇

猜你喜欢

热点阅读