如何使用Alamofire 5.0.0-beta.3(Swift 5)上传图像(多部分) [英] how to upload image (Multipart) using Alamofire 5.0.0-beta.3 (Swift 5)

查看:576
本文介绍了如何使用Alamofire 5.0.0-beta.3(Swift 5)上传图像(多部分)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用分段上传图片.此代码可以在 swift 4 Alamofire 4中正常工作..请为此提供任何解决方案.

I am working on uploading image using multipart. This Code Working fine in swift 4 and Alamofire 4. Please give any solution for this.

public class func callsendImageAPI(param:[String: Any],arrImage:[UIImage],imageKey:String,URlName:String,controller:UIViewController, withblock:@escaping (_ response: AnyObject?)->Void){

    Alamofire.upload(multipartFormData:{ MultipartFormData in

        for (key, value) in param {
            MultipartFormData.append((value as AnyObject).data(using: String.Encoding.utf8.rawValue)!, withName: key)
        }

        for img in arrImage {

            guard let imgData = img.jpegData(compressionQuality: 1) else { return }
            MultipartFormData.append(imgData, withName: imageKey, fileName: FuncationManager.getCurrentTimeStamp() + ".jpeg", mimeType: "image/jpeg")
        }

    },usingThreshold:UInt64.init(),
      to: "URL",
        method:.post,
        headers:["Content-type": "multipart/form-data",
                 "Content-Disposition" : "form-data"],
        encodingCompletion: { encodingResult in
            switch encodingResult {
            case .success(let upload, , ):

                upload.uploadProgress(closure: { (Progress) in
                    print("Upload Progress: \(Progress.fractionCompleted)")
                })

                upload.responseJSON { response in
                    switch(response.result) {
                    case .success(_):
                        let dic = response.result.value as! NSDictionary
                        if (dic.object(forKey:  "status")! as! Int == 1){
                            withblock(dic.object(forKey: "data") as AnyObject)
                        }else if (dic.object(forKey: Message.Status)! as! Int == 2){
                            print("error message")

                        }else{
                            print("error message")
                        }
                    case .failure(_):
                        print("error message")
                    }
                }

            case .failure(let encodingError):
                print("error message")
            }
    })}

谢谢.

推荐答案

请参考以下代码.

public class func callsendImageAPI(param:[String: Any],arrImage:[UIImage],imageKey:String,URlName:String,controller:UIViewController, withblock:@escaping (_ response: AnyObject?)->Void){

    let headers: HTTPHeaders
    headers = ["Content-type": "multipart/form-data",
               "Content-Disposition" : "form-data"]
    
    AF.upload(multipartFormData: { (multipartFormData) in
        
        for (key, value) in param {
            multipartFormData.append((value as! String).data(using: String.Encoding.utf8)!, withName: key)
        }
        
        for img in arrImage {
            guard let imgData = img.jpegData(compressionQuality: 1) else { return }
            multipartFormData.append(imgData, withName: imageKey, fileName: FuncationManager.getCurrentTimeStamp() + ".jpeg", mimeType: "image/jpeg")
        }
        
        
    },usingThreshold: UInt64.init(),
      to: URL.init(string: URlName)!,
      method: .post,
      headers: headers).response{ response in
        
        if((response.error != nil)){
            do{
                if let jsonData = response.data{
                    let parsedData = try JSONSerialization.jsonObject(with: jsonData) as! Dictionary<String, AnyObject>
                    print(parsedData)
                    
                    let status = parsedData[Message.Status] as? NSInteger ?? 0
                    
                    if (status == 1){
                        if let jsonArray = parsedData["data"] as? [[String: Any]] {
                            withblock(jsonArray as AnyObject)
                        }
                        
                    }else if (status == 2){
                        print("error message")
                    }else{
                        print("error message")
                    }
                }
            }catch{
                print("error message")
            }
        }else{
             print(response.error!.localizedDescription)
        }
    }
}

很高兴为您提供帮助:)

Happy to help you :)

这篇关于如何使用Alamofire 5.0.0-beta.3(Swift 5)上传图像(多部分)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆