-多表单处理
HTTP请求实质上是对指定数据格式的拼接,然后将拼接后的数据进行传输 。下面对多表单数据处理进行分析 。
主要完成以下工作:
首先看应用实例:
func alamofireUploadFile(){let data = http://www.kingceram.com/post/self.readLocalData(fileNameStr:"Cooci", type: "jpg")SessionManager.default.upload(multipartFormData: { (mutilPartData) inmutilPartData.append("Apple".data(using: .utf8)!, withName: "name")mutilPartData.append("Banana".data(using: .utf8)!, withName: "username")mutilPartData.append("Orange".data(using: .utf8)!, withName: "PASSWORD")//mutilPartData.append(data as! Data, withName: "fileName")}, to: urlString) { (result) inprint(result)switch result {case .failure(let error):print(error)case .success(let upload,_,_):upload.response(completionHandler: { (response) inprint("****:\(response) ****")})}}}
函数
open func upload(multipartFormData: @escaping (MultipartFormData) -> Void,usingThreshold encodingMemoryThreshold: UInt64 = SessionManager.multipartFormDataEncodingMemoryThreshold,with urlRequest: URLRequestConvertible,queue: DispatchQueue? = nil,encodingCompletion: ((MultipartFormDataEncodingResult) -> Void)?){DispatchQueue.global(qos: .utility).async {let formData = http://www.kingceram.com/post/MultipartFormData()multipartFormData(formData)...}
类
嵌套结构体类,用于存储信息 。主要进行设置分隔符、
设置“\r\n”符号、设置随机、设置等一系列操作 。
函数
public func append(_ stream: InputStream, withLength length: UInt64, headers: HTTPHeaders) {let bodyPart = BodyPart(headers: headers, bodyStream: stream, bodyContentLength: length)bodyParts.append(bodyPart)}
【Alamofire-多表单处理】构造对象,并添加到容器中 。
类
class BodyPart {let headers: HTTPHeaderslet bodyStream: InputStreamlet bodyContentLength: UInt64var hasInitialBoundary = falsevar hasFinalBoundary = falseinit(headers: HTTPHeaders, bodyStream: InputStream, bodyContentLength: UInt64) {self.headers = headersself.bodyStream = bodyStreamself.bodyContentLength = bodyContentLength}}
使用面向对象的设计模式,将 ++封装为对象,然后放到容器中:.() 。
中数据的使用
我们回到函数:这里采用异步async调用进行处理,do循环中对数据进行使用 。
()函数
将容器中的数据拼接到一起并返回 。
:最终网络请求上传函数
这就回到了我们熟悉的中的函数了 。由于前面文章已经对进行了阐述,此处不再赘述 。
注:为什么数据要拼接为进行传输呢?
流传输能够减轻系统压力,节省内存 。
多表单上传总结:整合数据 -> 为流数据 -> 请求 -> 网络请求 。
- 云办公,从不盲目跟风
- 35kv是多少伏
- 160kva变压器额定电流是多少
- 150寸投影仪一般距离幕布多少米
- 12400f内存频率最高多少
- 0.85公顷等于多少平方米
- 100克酸奶是多少毫升
- 78分贝的噪音有多大
- 800m流量能用多久
- 8g内存卡可以存多少照片