SBTHttpTool.swift 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  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. }