본문 바로가기

카테고리 없음

Swift - Alamofire - REST API2 파일 업로드

POST

private func requestPost<T:Codable>(url:String, params:[String:Any], dataKey:String, data:Data, completion:@escaping (APIResult<T>)->Void) {

        print("\n\n")

        print("REQUEST POST Multipart")

        print(url)

        

        

        print("\n\n")

        

        self.request = AF.upload(multipartFormData: { multiPart in

            for (key, value) in params {

                if let temp = value as? String {

                    multiPart.append(temp.data(using: .utf8)!, withName: key)

                }

                if let temp = value as? Int {

                    multiPart.append("\(temp)".data(using: .utf8)!, withName: key)

                }

                if let temp = value as? NSArray {

                    temp.forEach({ element in

                        let keyObj = key + "[]"

                        if let string = element as? String {

                            multiPart.append(string.data(using: .utf8)!, withName: keyObj)

                        } else

                        if let num = element as? Int {

                            let value = "\(num)"

                            multiPart.append(value.data(using: .utf8)!, withName: keyObj)

                        }

                    })

                }

            }

            

            multiPart.append(data, withName: dataKey, fileName: "goodsImage.jpg", mimeType: "image/jpeg")

            

        }, to: url, method: .post

                  , headers: nil)

        self.request?.validate(statusCode: 200..<500)

        self.request?.responseDecodable(of: T.self) { response in

            

            switch response.result {

            case .success(let data):

                completion(.success(data))

            case .failure(let error):

                completion(.failure(error))

                

            }

            

        }

            

    }

 

 

PUT

private func requestPut<T:Codable>(url:String, params:[String:Any], dataKey:String, data:Data, completion:@escaping (APIResult<T>)->Void) {

        print("\n\n")

        print("REQUEST Put Multipart")

        print(url)

        

      

        

        

        print("\n\n")

        

        self.request = AF.upload(multipartFormData: { multiPart in

            for (key, value) in params {

                if let temp = value as? String {

                    multiPart.append(temp.data(using: .utf8)!, withName: key)

                }

                if let temp = value as? Int {

                    multiPart.append("\(temp)".data(using: .utf8)!, withName: key)

                }

                if let temp = value as? NSArray {

                    temp.forEach({ element in

                        let keyObj = key + "[]"

                        if let string = element as? String {

                            multiPart.append(string.data(using: .utf8)!, withName: keyObj)

                        } else

                        if let num = element as? Int {

                            let value = "\(num)"

                            multiPart.append(value.data(using: .utf8)!, withName: keyObj)

                        }

                    })

                }

            }

            

            multiPart.append(data, withName: dataKey, fileName: "goodsImage.jpg", mimeType: "image/jpeg")

            

        }, to: url, method: .put

                  , headers: nil)

            .uploadProgress(queue: .main, closure: { progress in

                //Current upload progress of file

                print("Upload Progress: \(progress.fractionCompleted)")

            })

        

        

        self.request?.validate(statusCode: 200..<500)

        

        self.request?.responseDecodable(of: T.self) { response in

            

            switch response.result {

            case .success(let data):

                completion(.success(data))

            case .failure(let error):

                completion(.failure(error))

                

            }

            

        }

            

    }