// // SBTHttpTool.swift // SolarBT // // Created by weclouds on 2019/8/9. // Copyright © 2019 weclouds. All rights reserved. // import UIKit import MobileCoreServices class SBTHttpTool: NSObject { internal static let shareInstance = SBTHttpTool() // open func dataTask(with url: URL, completionHandler: @escaping (Data?, URLResponse?, Error?) -> Void) -> URLSessionDataTask func startUpload(_ url:String, parmeters : Data,successHandler:@escaping ((String)->Void),failureHandler:@escaping ((Error?) ->Void) ){ //上传地址 let postUrl = URL(string: url) var request = URLRequest(url: postUrl!) //请求类型 request.httpMethod = "POST" request.setValue("multipart/form-data", forHTTPHeaderField: "Content-Type") //创建表单body request.httpBody = parmeters //创建一个表单上传任务 let session = URLSession.shared let uploadTask = session.dataTask(with: request) { (data, response, error) in if error != nil{ log.debug(error) failureHandler(error) }else{ let str = String(data: data!, encoding: .utf8) log.debug("---上传完毕--\(str!)") successHandler(str!) } } //使用resume方法启动任务 uploadTask.resume() } // //创建表单body // func createBody(with parameters : [String:Any]) -> Data { // var body = Data() // //添加参数数据 // for (key,value) in parameters { // body.append("Content-Disposition: form-data; name=\"\(key)\"\r\n\r\n") // body.append("\(value)\r\n") // } // return body // } //根据后缀获取对应的Mine-Type func mimeType(pathExtension:String) -> String { if let uti = UTTypeCreatePreferredIdentifierForTag(kUTTagClassFilenameExtension, pathExtension as NSString, nil)?.takeRetainedValue() { if let mimetype = UTTypeCopyPreferredTagWithClass(uti, kUTTagClassMIMEType)? .takeRetainedValue() { return mimetype as String } } //文件资源类型如果不知道,传万能类型application/octet-stream,服务器会自动解析文件类 return "application/octet-stream" } } extension Data{ ///增加直接添加String数据的方法 mutating func append(_ string :String,using encoding:String.Encoding = .utf8) { if let data = string.data(using: encoding) { append(data) } } }