123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160 |
- //
- // 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<T>(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<T>(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)!
- }
- }
|