本文介绍了在iOS Swift中使用Alamofire 5从MultipartformData中上传带有参数的文件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在尝试上传带有参数(multipartformdata)的文件,但是我无法使用新版本的Alamofire 5进行上传,如果您有使用Alamofire 5的经验,请与我分享.
I am trying upload files with parameters (multipartformdata) but i can't do it with new version Alamofire 5, if you have some experience with Alamofire 5 please share it with me.
func uploadPluckImage(imgData : Data, imageColumnName : String, url:String,httpmethod:HTTPMethod,completionHandler: @escaping (NSDictionary?, String?) -> ()){ let token = UserDefaults.standard.string(forKey: PrefKeys.loginToken) ?? "" let authorization = ["Authorization" : "Bearer \(token)"] let parameters: Parameters? parameters = [ "garbageCollector": 0, "stuff_uuid": "2b4b750a-f4a6-4d61-84ce-7c42b5c030ee", "delete_file" : "" ] let headers : HTTPHeader? headers = ["Authorization" : "Bearer \(token)"] let imageURl = "68.183.152.132/api/v1/stuff/uploader" AF.upload(multipartFormData: { (multipart: MultipartFormData) in let imageData = self.firstImage.image?.jpegData(compressionQuality: 0.7) multipart.append(imageData, withName: "file", fileName: "file.png", mimeType: "image/png") for (ker, value) in parameters!{ multipart.append(value as! String).data(using: .utf8)!, withName: key) } },usingThreshold: UInt64.init(), to: imageURl, method: .post, headers: headers, encodingCompletion: { (result) in switch result { case .success(let upload, _, _): upload.uploadProgress(closure: { (progress) in print("Uploading") }) break case .failure(let encodingError): print("err is \(encodingError)") break } }) } 推荐答案在Alamofire 5中上传方法略有更改
Upload method slightly changed in Alamofire 5
func upload(image: Data, to url: Alamofire.URLRequestConvertible, params: [String: Any]) { 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(image, withName: "file", fileName: "file.png", mimeType: "image/png") }, with: url) .uploadProgress(queue: .main, closure: { progress in //Current upload progress of file print("Upload Progress: \(progress.fractionCompleted)") }) .responseJSON(completionHandler: { data in //Do what ever you want to do with response }) }希望这对您有帮助
如果您不太了解上述内容,请进行以下扩展:
In case you don't quite get the above, here is an expansion:
let uploadRequest: UploadRequest = AF.upload(multipartFormData: multipartFormData, with: ...) let completionHander: (AFDataResponse<Any>) -> Void) = { result in //Do what ever you want to do with response, which is a DataResponse<Success, AFError> } // Adds that completion hander to the UploadRequest uploadRequest.responseJSON(completionHandler: completionHander)更多推荐
在iOS Swift中使用Alamofire 5从MultipartformData中上传带有参数的文件
发布评论