Swift Alamofire5數據訪問封裝,數組參數,多圖上傳
//
// NetHelper.swift
// ZXCenter
//
// Created by Seasons on 2019/5/17.
// Copyright © 2019 yang. All rights reserved.
//
import Foundation
import Alamofire
typealias SuccessBlock = ([String:Any]) -> Void
typealias FailureBlock = (AnyObject) -> Void
typealias ProgressBlock = (Float) -> Void
class NetHelper: NSObject {
//MARK: - GET請求
class func GET(url:String,param:[String:Any]?,success: @escaping SuccessBlock) {
if param != nil {
print("\n param:")
print(param! as [String:Any])
}
print("url===:" + url)
let urlPath:URL = URL(string: url)!
let headers:HTTPHeaders = ["Content-Type":"application/json;charset=utf-8"]
let request = AF.request(urlPath,method: .get,parameters: param,encoding: JSONEncoding.default, headers: headers)
request.responseJSON { (response) in
DispatchQueue.global().async(execute: {
print(response.result)
switch response.result {
case let .success(result):
do {
let resultDict:[String:Any] = result as! [String:Any]
DispatchQueue.main.async(execute: {
/** 返回碼處理 */
let resp_code: Int = (resultDict["resp_code"] as! Int)
switch resp_code {
case 0:
success(resultDict)
case 1:
// SVProgressHUD.showError(withStatus: (resultDict["resp_msg"] as! String))
default:
// SVProgressHUD.showError(withStatus: (resultDict["resp_msg"] as! String))
}
})
}
case let .failure(error):
// SVProgressHUD.dismiss()
print(error)
}
})
}
}
//MARK: - POST請求 字典參數 ["id":"1","value":""]
class func POST(url:String,param:[String:Any]?,success: @escaping SuccessBlock) {
if param != nil {
print("\n param:")
print(param! as [String:Any])
}
print("url===:" + url)
let urlPath:URL = URL(string: url)!
let headers:HTTPHeaders = ["Content-Type":"application/json;charset=UTF-8"]
let request = AF.request(urlPath,method: .post,parameters: params,encoding: JSONEncoding.default, headers: headers)
request.responseJSON { (response) in
DispatchQueue.global().async(execute: {
print(response.result)
switch response.result {
case let .success(result):
do {
DispatchQueue.main.async(execute: {
/** 返回碼處理 */
let resp_code: Int = (resultDict["resp_code"] as! Int)
switch resp_code {
case 0:
success(resultDict)
case 1:
// SVProgressHUD.showError(withStatus: (resultDict["resp_msg"] as! String))
default:
// SVProgressHUD.showError(withStatus: (resultDict["resp_msg"] as! String))
}
})
}
case let .failure(error):
SVProgressHUD.dismiss()
print(error)
}
})
}
}
//MARK: - POST請求 數組參數(由於有數組參數的需求 )[["id":"1","value":""],["id":"2","value":""]]
class func POST2(url:String,param:Array<[String:String]>,success: @escaping SuccessBlock) {
print("url===:" + url)
let urlPath:URL = URL(string: url)!
print("\n param:")
print(param! as [String:Any])
let data = try? JSONSerialization.data(withJSONObject: param, options: [])
var urlRequest = URLRequest(url: urlPath)
urlRequest.httpMethod = "POST"
urlRequest.httpBody = data
urlRequest.allHTTPHeaderFields = ["application/json":"Accept","application/json;charset=UTF-8":"Content-Type"]
let request = AF.request(urlRequest)
request.responseJSON { (response) in
DispatchQueue.global().async(execute: {
print(response.result)
switch response.result {
case let .success(result):
do {
let resultDict:[String:Any] = result as! [String:Any]
DispatchQueue.main.async(execute: {
/** 返回碼 (Int 類型code 會報崩) */
let code = resultDict["resp_code"]
var resp_code = 0
if code is String {
resp_code = Int(code as! String)!
} else if code is Int {
resp_code = code as! Int
}
switch resp_code {
case 0:
success(resultDict)
case 1:
// SVProgressHUD.showError(withStatus: (resultDict["resp_msg"] as! String))
default:
//SVProgressHUD.showError(withStatus: (resultDict["resp_msg"] as! String))
}
})
}
case let .failure(error):
SVProgressHUD.dismiss()
print(error)
}
})
}
}
//MARK: - 多圖上傳 UIImage 數組 [UIImage]
class func IMGS(url:String,param:[String:Any],images:[UIImage],success: @escaping SuccessBlock) {
let request = AF.upload(multipartFormData: { (mutilPartData) in
for image in images {
// 圖片壓縮 在下篇博客 https://editor.csdn.net/md/?articleId=106528518
let imgData = UIImage.imageCompress(image: image)
mutilPartData.append(imgData, withName: "files", fileName: String(String.getCurrentTimeStamp()) + ".jpg", mimeType: "image/jpg/png/jpeg")
}
//有參數
if param != nil {
for key in params.keys {
let value = params[key] as! String
let vData:Data = value.data(using: .utf8)!
mutilPartData.append(vData, withName: key)
}
}
}, to: url, usingThreshold: UInt64.init(), method: .post, headers: [], interceptor: nil, fileManager: FileManager())
request.uploadProgress { (progress) in
// SVProgressHUD.showInfo(withStatus: "正在上傳圖片")
}
request.responseJSON { (response) in
print(response)
DispatchQueue.global().async(execute: {
switch response.result {
case let .success(result):
do {
let resultDict:[String:Any] = result as! [String:Any]
DispatchQueue.main.async(execute: {
// type 1:部分上傳成功,2:全部圖片上傳失敗,0:全部上傳成功
let resp_code: Int = (resultDict["resp_code"] as! Int)
switch resp_code {
case 0:
success(resultDict)
case 1:
SVProgressHUD.showError(withStatus: (resultDict["resp_msg"] as! String))
default:
SVProgressHUD.showError(withStatus: (resultDict["resp_msg"] as! String))
}
})
}
case let .failure(error):
SVProgressHUD.dismiss()
print(error)
}
})
}
}
//MARK: - 多圖上傳 沙盒圖片路徑字符串"xxx.jpg;xxx.jpg"
// 數組 替換imageString (我這裏處理的是SQLite存儲的圖片數據,所以封的字串)
class func IMGPath(url:String,param:[String:Any],imageString:String,success: @escaping SuccessBlock) {
let request = AF.upload(multipartFormData: { (mutilPartData) in
let list:[String] = imageString.components(separatedBy: ";")
for i in 0..<list.count {
if list[i].count > 0 {
mutilPartData.append(URL(fileURLWithPath: list[i]), withName: "files", fileName: String(String.getCurrentTimeStamp()) + "_" + String(i) + ".jpg", mimeType: "image/jpg/png/jpeg")
}
}
// 有參數
if param != nil {
for key in param.keys {
let value = param[key] as! String
let vData:Data = value.data(using: .utf8)!
mutilPartData.append(vData, withName: key)
}
}
}, to: url, usingThreshold: UInt64.init(), method: .post, headers: [], interceptor: nil, fileManager: FileManager())
request.uploadProgress { (progress) in
print(progress)
}
request.responseJSON { (response) in
print(response)
DispatchQueue.global().async(execute: {
switch response.result {
case let .success(result):
do {
let resultDict:[String:Any] = result as! [String:Any]
DispatchQueue.main.async(execute: {
// type 1:部分上傳成功,2:全部圖片上傳失敗,0:全部上傳成功
let resp_code: Int = (resultDict["resp_code"] as! Int)
switch resp_code {
case 0:
success(resultDict)
case 1:
SVProgressHUD.showError(withStatus: (resultDict["resp_msg"] as! String))
default:
SVProgressHUD.showError(withStatus: (resultDict["resp_msg"] as! String))
}
})
}
case let .failure(error):
SVProgressHUD.dismiss()
print(error)
}
})
}
}
}
// 調用
// NetHelper.GET(...)
有問題或建議 請聯繫