Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/115.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何使用alamofire上传带有其他用户详细信息的用户图像作为参数,我使用的是alamofire(4.5.1)_Ios_Xcode_Swift3_Alamofire - Fatal编程技术网

Ios 如何使用alamofire上传带有其他用户详细信息的用户图像作为参数,我使用的是alamofire(4.5.1)

Ios 如何使用alamofire上传带有其他用户详细信息的用户图像作为参数,我使用的是alamofire(4.5.1),ios,xcode,swift3,alamofire,Ios,Xcode,Swift3,Alamofire,我尝试了下面的代码,但它抛出了一个错误 “失败:responseSerializationFailed(Alamofire.AFError.ResponseSerializationFailureReason.jsonSerializationFailed(错误域=NSCOAErrorDomain代码=3840”字符1周围的无效值。“用户信息={NSDebugDescription=字符1周围的无效值。}”)” 我在ServiceHendler.swift文件中创建的以下方法 func uplo

我尝试了下面的代码,但它抛出了一个错误 “失败:responseSerializationFailed(Alamofire.AFError.ResponseSerializationFailureReason.jsonSerializationFailed(错误域=NSCOAErrorDomain代码=3840”字符1周围的无效值。“用户信息={NSDebugDescription=字符1周围的无效值。}”)


我在ServiceHendler.swift文件中创建的以下方法

func uploadImageWithAlamofire(Parameters params : [String : AnyObject]?,ImageParameters imgparams :  [NSObject : AnyObject]?,VideoParameters vidoparam :  [NSObject : AnyObject]?,Action action : NSString, success: @escaping (AnyObject) -> Void, failure: @escaping (AnyObject) -> Void)
    {

        var base_url = "BASEURL"
        base_url.append("Profile/ProfilePhoto")
        let ACCESS_TOKEN =  UserDefaults.standard.value(forKey: "access_token")
        let ACCESS_TYPE =  UserDefaults.standard.value(forKey: "token_type")
        let Auth_Token : NSString = "\(ACCESS_TYPE as! String) \(ACCESS_TOKEN as! String)" as NSString

        let headers:[String:String] = [
            "Authorization": Auth_Token as String,
            "Content-Type": "application/json"
        ]

        Alamofire.upload(multipartFormData: { multipartFormData in
            if imgparams != nil{
                for (key, value) in imgparams! {
                    if let imageData = UIImageJPEGRepresentation(value as! UIImage, 0.7) {
                        multipartFormData.append(imageData, withName: key as! String, fileName: "FILENAME.png", mimeType: "image/png")
                    }
                }
            }
            if vidoparam != nil{
                for (key, value) in vidoparam! {
                    multipartFormData.append(value as! URL , withName: key as! String, fileName: "\(NSDate().timeIntervalSince1970 * 1000).mp4", mimeType: "application/octet-stream")
                }
            }
            if params != nil
            {
                 for (key, value) in params! {
                      multipartFormData.append((value as! String).data(using: .utf8)!, withName: key as! String)
                 }
            }
            }, to: base_url, method: .post, headers: headers,
                 encodingCompletion: { encodingResult in
                    switch encodingResult {
                    case .success(let upload, _, _):
                        upload.uploadProgress { progress in
                            print(progress.fractionCompleted)
                        }
                        upload.response { [weak self] response in
                            guard self != nil else {
                                return
                            }
                            let responseString = String(data: response.data!, encoding: String.Encoding.utf8)
                            DispatchQueue.main.async {
                                return success(responseString as AnyObject)
                            }


                        }
                    case .failure(let encodingError):
                        print("error:\(encodingError)")
                        return failure(encodingError as AnyObject)
                    }
        })

    }
let imgparam : NSMutableDictionary = NSMutableDictionary()
       imgparam.setValue(UserProfileImg.image == nil ? UIImage.init() : UserProfileImg.image!, forKey: "YOURWEBSERVICEPARAMKEY")
}

// create another NSMutableDictionary for your regular param like username , first name , bob , gender , amount , etc. same and just pass that param in parameter file 

 ServiceHendler.uploadImageWithAlamofire(Parameters: nil, ImageParameters: imgparam as [NSObject : AnyObject], VideoParameters: nil, Action: "", success: { (Success) in
            if let newdata : NSString = Success as? NSString{
                let data: Data? = newdata.data(using: String.Encoding.utf8.rawValue)
                let json: Any? = try? JSONSerialization.jsonObject(with: data!, options: [])

                let arraydata : NSDictionary = json as! NSDictionary
                print(arraydata)
                if let result :NSString = arraydata.value(forKey: "Result") as? NSString{
                    self.imagename = result

                }
                else{
                    AppUtilities.sharedInstance.hideLoader()
                    AppUtilities.sharedInstance.showAlert(title: "Error", msg: "Something might be wronge.")
                }

            }
        }) { (error) in
            print(error)
        }
像这样调用此方法也可以通过image传递更多参数

func uploadImageWithAlamofire(Parameters params : [String : AnyObject]?,ImageParameters imgparams :  [NSObject : AnyObject]?,VideoParameters vidoparam :  [NSObject : AnyObject]?,Action action : NSString, success: @escaping (AnyObject) -> Void, failure: @escaping (AnyObject) -> Void)
    {

        var base_url = "BASEURL"
        base_url.append("Profile/ProfilePhoto")
        let ACCESS_TOKEN =  UserDefaults.standard.value(forKey: "access_token")
        let ACCESS_TYPE =  UserDefaults.standard.value(forKey: "token_type")
        let Auth_Token : NSString = "\(ACCESS_TYPE as! String) \(ACCESS_TOKEN as! String)" as NSString

        let headers:[String:String] = [
            "Authorization": Auth_Token as String,
            "Content-Type": "application/json"
        ]

        Alamofire.upload(multipartFormData: { multipartFormData in
            if imgparams != nil{
                for (key, value) in imgparams! {
                    if let imageData = UIImageJPEGRepresentation(value as! UIImage, 0.7) {
                        multipartFormData.append(imageData, withName: key as! String, fileName: "FILENAME.png", mimeType: "image/png")
                    }
                }
            }
            if vidoparam != nil{
                for (key, value) in vidoparam! {
                    multipartFormData.append(value as! URL , withName: key as! String, fileName: "\(NSDate().timeIntervalSince1970 * 1000).mp4", mimeType: "application/octet-stream")
                }
            }
            if params != nil
            {
                 for (key, value) in params! {
                      multipartFormData.append((value as! String).data(using: .utf8)!, withName: key as! String)
                 }
            }
            }, to: base_url, method: .post, headers: headers,
                 encodingCompletion: { encodingResult in
                    switch encodingResult {
                    case .success(let upload, _, _):
                        upload.uploadProgress { progress in
                            print(progress.fractionCompleted)
                        }
                        upload.response { [weak self] response in
                            guard self != nil else {
                                return
                            }
                            let responseString = String(data: response.data!, encoding: String.Encoding.utf8)
                            DispatchQueue.main.async {
                                return success(responseString as AnyObject)
                            }


                        }
                    case .failure(let encodingError):
                        print("error:\(encodingError)")
                        return failure(encodingError as AnyObject)
                    }
        })

    }
let imgparam : NSMutableDictionary = NSMutableDictionary()
       imgparam.setValue(UserProfileImg.image == nil ? UIImage.init() : UserProfileImg.image!, forKey: "YOURWEBSERVICEPARAMKEY")
}

// create another NSMutableDictionary for your regular param like username , first name , bob , gender , amount , etc. same and just pass that param in parameter file 

 ServiceHendler.uploadImageWithAlamofire(Parameters: nil, ImageParameters: imgparam as [NSObject : AnyObject], VideoParameters: nil, Action: "", success: { (Success) in
            if let newdata : NSString = Success as? NSString{
                let data: Data? = newdata.data(using: String.Encoding.utf8.rawValue)
                let json: Any? = try? JSONSerialization.jsonObject(with: data!, options: [])

                let arraydata : NSDictionary = json as! NSDictionary
                print(arraydata)
                if let result :NSString = arraydata.value(forKey: "Result") as? NSString{
                    self.imagename = result

                }
                else{
                    AppUtilities.sharedInstance.hideLoader()
                    AppUtilities.sharedInstance.showAlert(title: "Error", msg: "Something might be wronge.")
                }

            }
        }) { (error) in
            print(error)
        }

尝试此方法,您甚至可以创建一个循环,就像您为设置参数而创建的一样。(Swift 2.x)

上传方式

func hitServiceUploadFile(fileURL:NSURL, fileName:String, timeStamp:String, token: String)
{
    //Convert all parameters into Data format and send fileData as URL
    Alamofire.upload(
        .POST,
        URL + "profile/update_profile",
        multipartFormData: { multipartFormData in
            multipartFormData.appendBodyPart(fileURL: fileURL, name: "Filedata")
            multipartFormData.appendBodyPart(data: value1.dataUsingEncoding(NSUTF8StringEncoding)!, name: "Key1")
            multipartFormData.appendBodyPart(data: value2.dataUsingEncoding(NSUTF8StringEncoding)!, name: "Key2")
            multipartFormData.appendBodyPart(data: value3.dataUsingEncoding(NSUTF8StringEncoding)!, name: "Key3")
        },
        encodingCompletion: { encodingResult in
            switch encodingResult {
            case .Success(let upload, _, _):
                upload.responseString { response in

                         print(response)

                        }
                    }
                }
            case .Failure(_):
                self.hideIndicator()
            }
        }
    )
}

multipartFormData.appendBodyPart(数据:image1Data,名称:“file”,文件名:“myImage.png”,mimeType:“image/png”)将您的这行代码替换为这行代码我想您建议的不是swift 3did,您只将图像上传到服务器中,您还传递了一些其他参数吗?我必须传递其他参数,如用户名、dob、, etc@AnilKumar检查更新的另一个并阅读我在答案中的描述。