SBTHttpTool.swift 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160
  1. //
  2. // SBTHttpTool.swift
  3. // SolarBT
  4. //
  5. // Created by weclouds on 2019/8/9.
  6. // Copyright © 2019 weclouds. All rights reserved.
  7. //
  8. import UIKit
  9. import MobileCoreServices
  10. class SBTHttpTool: NSObject {
  11. internal static let shareInstance = SBTHttpTool()
  12. // open func dataTask(with url: URL, completionHandler: @escaping (Data?, URLResponse?, Error?) -> Void) -> URLSessionDataTask
  13. func startUpload(_ url:String, parmeters : Data,successHandler:@escaping ((String)->Void),failureHandler:@escaping ((Error?) ->Void) ){
  14. //上传地址
  15. let postUrl = URL(string: url)
  16. var request = URLRequest(url: postUrl!)
  17. //请求类型
  18. request.httpMethod = "POST"
  19. request.setValue("multipart/form-data", forHTTPHeaderField: "Content-Type")
  20. //创建表单body
  21. request.httpBody = parmeters
  22. //创建一个表单上传任务
  23. let session = URLSession.shared
  24. let uploadTask = session.dataTask(with: request) { (data, response, error) in
  25. if error != nil{
  26. log.debug(error)
  27. failureHandler(error)
  28. }else{
  29. let str = String(data: data!, encoding: .utf8)
  30. log.debug("---上传完毕--\(str!)")
  31. successHandler(str!)
  32. }
  33. }
  34. //使用resume方法启动任务
  35. uploadTask.resume()
  36. }
  37. // //创建表单body
  38. // func createBody(with parameters : [String:Any]) -> Data {
  39. // var body = Data()
  40. // //添加参数数据
  41. // for (key,value) in parameters {
  42. // body.append("Content-Disposition: form-data; name=\"\(key)\"\r\n\r\n")
  43. // body.append("\(value)\r\n")
  44. // }
  45. // return body
  46. // }
  47. //根据后缀获取对应的Mine-Type
  48. func mimeType(pathExtension:String) -> String {
  49. if let uti = UTTypeCreatePreferredIdentifierForTag(kUTTagClassFilenameExtension,
  50. pathExtension as NSString,
  51. nil)?.takeRetainedValue() {
  52. if let mimetype = UTTypeCopyPreferredTagWithClass(uti, kUTTagClassMIMEType)?
  53. .takeRetainedValue() {
  54. return mimetype as String
  55. }
  56. }
  57. //文件资源类型如果不知道,传万能类型application/octet-stream,服务器会自动解析文件类
  58. return "application/octet-stream"
  59. }
  60. }
  61. extension Data{
  62. ///增加直接添加String数据的方法
  63. mutating func append(_ string :String,using encoding:String.Encoding = .utf8) {
  64. if let data = string.data(using: encoding) {
  65. append(data)
  66. }
  67. }
  68. }
  69. struct SBTEncoder {
  70. public static func encoder<T>(toString model:T) ->String? where T:Encodable{
  71. let encoder = JSONEncoder()
  72. encoder.outputFormatting = .prettyPrinted
  73. guard let data = try? encoder.encode(model) else { return nil }
  74. guard let jsonStr = String(data: data, encoding: .utf8) else { return nil }
  75. return jsonStr
  76. }
  77. public static func encoder<T>(toDictionary model: T)->[String:Any]? where T:Encodable{
  78. let encoder = JSONEncoder()
  79. guard let data = try? encoder.encode(model) else { return nil }
  80. guard let dict = try? JSONSerialization.jsonObject(with: data, options: .mutableLeaves) else { return nil }
  81. return (dict as! [String : Any])
  82. }
  83. public static func convertStringToDictionary(text: String) -> [String:AnyObject]? {
  84. if let data = text.data(using: String.Encoding.utf8) {
  85. do {
  86. return try JSONSerialization.jsonObject(with: data, options: [JSONSerialization.ReadingOptions.init(rawValue: 0)]) as? [String:AnyObject]
  87. } catch let error as NSError {
  88. print(error)
  89. }
  90. }
  91. return nil
  92. }
  93. public static func convertDictionaryToString(dict:[String:AnyObject]) -> String {
  94. var result:String = ""
  95. do {
  96. //如果设置options为JSONSerialization.WritingOptions.prettyPrinted,则打印格式更好阅读
  97. let jsonData = try JSONSerialization.data(withJSONObject: dict, options: JSONSerialization.WritingOptions.init(rawValue: 0))
  98. if let JSONString = String(data: jsonData, encoding: String.Encoding.utf8) {
  99. result = JSONString
  100. }
  101. } catch {
  102. result = ""
  103. }
  104. return result
  105. }
  106. public static func convertArrayToString(arr:[AnyObject]) -> String {
  107. var result:String = ""
  108. do {
  109. let jsonData = try JSONSerialization.data(withJSONObject: arr, options: JSONSerialization.WritingOptions.init(rawValue: 0))
  110. if let JSONString = String(data: jsonData, encoding: String.Encoding.utf8) {
  111. result = JSONString
  112. }
  113. } catch {
  114. result = ""
  115. }
  116. return result
  117. }
  118. }
  119. extension Dictionary where Key: ExpressibleByStringLiteral, Value:AnyObject {
  120. var jsonString:String {
  121. do {
  122. let stringData = try JSONSerialization.data(withJSONObject: self as NSDictionary, options: JSONSerialization.WritingOptions.prettyPrinted)
  123. if let string = String(data: stringData, encoding: String.Encoding.utf8){
  124. return string
  125. }
  126. } catch _ {
  127. }
  128. return ""
  129. }
  130. }
  131. extension String{
  132. func toData() -> Data {
  133. return self.data(using: .utf8)!
  134. }
  135. }