AFNetworking上传图片的步骤是利用图片设置到request的HTTPBodyStream中去,然后利用带有图片的request新建task上传。HYNetworking内部实现上传图片的时候,其实就是采用AFNetworking关于上传图片的API,都是AFNetworking里面一个API。XMNetworking上传图片请求也是基于AFNetworking上传进行的封装,不过比HYNetworking更加隐晦而已,另外它封装了上次图片数组的方法。

AFNetworking

  1. 压缩转换:UIImage实例对象通过UIImageJPEGRepresentation(压缩)转换为NSData,下面称之为imageData。
  2. 信息整合:将imageData与文件名fileName,文件路径name,类型名mimeType整合成图片模型(AFHTTPBodyPart)的一个对象bodyPart中去。
  3. 添加图片模型:将上面新建好的图片模型对象bodyPart,向图片输入流(AFMultipartBodyStream)的对象bodyStream的数组属性(HTTPBodyParts)添加。
  4. 设置request的HTTPBodyStream属性为bodyStream:封装为requestByFinalizingMultipartFormData
  5. 将图片模型对象formData用AFNetwork的POST请求与uploadTaskWithStreamedRequest方法进行上传。

HYBNetworking

  1. 压缩转换:UIImage实例对象通过UIImageJPEGRepresentation压缩转换为NSData,下面称之为imageData。
  2. 信息整合:利用AFNetwork的appendPartWithFileData,将imageData与文件名fileName,文件路径name,类型名mimeType整合成图片模型(AFStreamingMultipartFormData)的一个对象formData中去。
  3. 将图片模型对象formData用AFNetwork的POST请求与uploadTaskWithStreamedRequest方法进行上传。

XMNetworking

  1. 压缩转换:UIImage实例对象通过UIImageJPEGRepresentation压缩转换为NSData,下面称之为imageData。
  2. 信息整合:利用AFNetwork的appendPartWithFileData,将imageData与文件名fileName,文件路径name,类型名mimeType整合成图片模型(XMUploadFormData)的一个对象formData中去。
  3. 添加图片模型:向管理器的图片模型数组uploadFormDatas添加上面新建好的图片模型对象formData。
  4. 遍历图片模型数组,获得图片模型,利用AFNetwork的POST请求与uploadTaskWithStreamedRequest方法进行上传。

【总结】 可见,上面三种框架都是基于AFNetworking进行的封装,实质的流程还是一样的。上传图片的流程图1所示。

图1