Alamofire: responseSerializationFailed(Alamofire.AFError.ResponseSerializationFailureReason.inputDataNilOrZeroLength)

谁说胖子不能爱 提交于 2019-11-27 19:41:49

问题


I am trying to upload data through alamofire including images. But it returns

responseSerializationFailed(Alamofire.AFError.ResponseSerializationFailureReason.inputDataNilOrZeroLength)

-- and my code is ,

    Alamofire.upload(multipartFormData: { (multipartFormData) in

            multipartFormData.append((userid?.data(using: String.Encoding.utf8))!, withName: "user_id")

            multipartFormData.append((self.addUserBtnTag?.description.data(using: String.Encoding.utf8))!, withName: "slot")
}, to: urlString, method: .post, encodingCompletion: { (result) in
 switch result {
            case .success(let upload, _, _):

                upload.responseJSON { response in

                    print(response.result)
                    print("Response : ", response)

                    if response.result.isSuccess
                    {
                        let JSON = response.result.value as? NSDictionary

                        print("EditJSON : ", JSON!)
                    }
                }
            case .failure(let encodingError):
                print(encodingError)
            }
        })

But actually I am passing more than ten parameters through alamofire.


回答1:


Just change from responseJSON to responseString

Alamofire.upload(multipartFormData: { (multipartFormData) in

            multipartFormData.append((userid?.data(using: String.Encoding.utf8))!, withName: "user_id")

            multipartFormData.append((self.addUserBtnTag?.description.data(using: String.Encoding.utf8))!, withName: "slot")
}, to: urlString, method: .post, encodingCompletion: { (result) in
 switch result {
            case .success(let upload, _, _):

                upload.responseString { response in

                    print(response.result)
                    print("Response : ", response)

                    if response.result.isSuccess
                    {
                        let JSON = response.result.value as? NSDictionary

                        print("EditJSON : ", JSON!)
                    }
                }
            case .failure(let encodingError):
                print(encodingError)
            }

        })



回答2:


Try this for uploading image with parameter with alamofire

 Alamofire.upload(multipartFormData: { (multipartFormData) in

        let imageData: NSData? = UIImageJPEGRepresentation(image, 0.5) as NSData?
        if imageData != nil {

            multipartFormData.append(imageData! as Data, withName: strImageKey, fileName: "imagep.jpeg", mimeType: "imagep/jpeg")

            for (key, value) in dictParams {
                let data = "\(value)".data(using: .utf8)
                multipartFormData.append(data! as Data, withName: key)
            }
        }

    }, with: requestName,encodingCompletion: { encodingResult in
        switch encodingResult {
        case .success(let upload, _, _):

            upload.responseJSON { response in
                log.debug("Image(s) Uploaded successfully:\(response)")
                //Networking.handleApiResponse(response)
            }
        case .failure(let encodingError):
            log.debug("encodingError:\(encodingError)")
            // Networking.handleApiResponse(response)

            Util.showAlertWithMessage(msgSorry, title:"Error")
        }
        completionHandler!(encodingResult)
    }
    )


来源:https://stackoverflow.com/questions/51535498/alamofire-responseserializationfailedalamofire-aferror-responseserializationfa

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!