Swift Alamofire5 數據請求,數組參數,多圖上傳

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(...)

有問題或建議 請聯繫

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章