// // 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) } } } struct SBTEncoder { public static func encoder(toString model:T) ->String? where T:Encodable{ let encoder = JSONEncoder() encoder.outputFormatting = .prettyPrinted guard let data = try? encoder.encode(model) else { return nil } guard let jsonStr = String(data: data, encoding: .utf8) else { return nil } return jsonStr } public static func encoder(toDictionary model: T)->[String:Any]? where T:Encodable{ let encoder = JSONEncoder() guard let data = try? encoder.encode(model) else { return nil } guard let dict = try? JSONSerialization.jsonObject(with: data, options: .mutableLeaves) else { return nil } return (dict as! [String : Any]) } public static func convertStringToDictionary(text: String) -> [String:AnyObject]? { if let data = text.data(using: String.Encoding.utf8) { do { return try JSONSerialization.jsonObject(with: data, options: [JSONSerialization.ReadingOptions.init(rawValue: 0)]) as? [String:AnyObject] } catch let error as NSError { print(error) } } return nil } public static func convertDictionaryToString(dict:[String:AnyObject]) -> String { var result:String = "" do { //如果设置options为JSONSerialization.WritingOptions.prettyPrinted,则打印格式更好阅读 let jsonData = try JSONSerialization.data(withJSONObject: dict, options: JSONSerialization.WritingOptions.init(rawValue: 0)) if let JSONString = String(data: jsonData, encoding: String.Encoding.utf8) { result = JSONString } } catch { result = "" } return result } public static func convertArrayToString(arr:[AnyObject]) -> String { var result:String = "" do { let jsonData = try JSONSerialization.data(withJSONObject: arr, options: JSONSerialization.WritingOptions.init(rawValue: 0)) if let JSONString = String(data: jsonData, encoding: String.Encoding.utf8) { result = JSONString } } catch { result = "" } return result } } extension Dictionary where Key: ExpressibleByStringLiteral, Value:AnyObject { var jsonString:String { do { let stringData = try JSONSerialization.data(withJSONObject: self as NSDictionary, options: JSONSerialization.WritingOptions.prettyPrinted) if let string = String(data: stringData, encoding: String.Encoding.utf8){ return string } } catch _ { } return "" } } extension String{ func toData() -> Data { return self.data(using: .utf8)! } }