Загрузка изображения с массивом в параметре имеет ошибку ResponseSerializationFailureReason.inputDataNilOrZeroLength - PullRequest
0 голосов
/ 19 сентября 2019

Я пытаюсь отправить / опубликовать изображение с параметрами, используя Alamofire.JSON, который я пытаюсь отправить, должен выглядеть следующим образом:

{"distance":"24", "pace":"10", "time":"60", "userEvents":["148","149"]}

Но я получаю сообщение об ошибке:

responseSerializationFailed (причина: Alamofire.AFError.ResponseSerializationFailureReason.inputDataNilOrZeroLength)

Я пытаюсь выяснить, есть ли проблема в моих параметрах и изображении.

func submit(uploadImage:UIImage, distance:String, pace:String, time:String, location:String!, userEvents:[Int32]!, completion: @escaping (_ err:Error?)->()){
    print("Submitting...")

    let _header: HTTPHeaders = ["Authorization":"Bearer \(properties.ACCESS_TOKEN)"]
    let serverURL = String(format: SERVER_URL_SUBMIT)
    let param: Parameters = ["distance":distance, "pace":pace, "time":time, "location":location, "userEvents":userEvents]

    guard let imageData = uploadImage.jpegData(compressionQuality: 0.5) else {
        print("Unable to get JPEG representation for image \(uploadImage)")
        return
    }

    Alamofire.upload(multipartFormData: { MultipartFormData in
        for (key, value) in param {
            if let events = value as? [String], key == "userEvents" {
                let arrData = try! JSONSerialization.data(withJSONObject: events, options: .prettyPrinted)
                MultipartFormData.append(arrData as Data, withName: key)
            }
            MultipartFormData.append("\(value)".data(using: String.Encoding.utf8)!, withName: key)
        }
        MultipartFormData.append(imageData, withName: "image", fileName: "imageProof.jpg", mimeType: "image/jpeg")

    }, to: serverURL, method: .post, headers: _header, encodingCompletion: { (result) in
        switch result {
            case .success(let upload, _, _):
                upload.uploadProgress(closure: { (progress) in
                    print("Upload Progress: \(progress.fractionCompleted)")
                })

                upload.responseData(completionHandler: { (response) in
                    print(response)

                    switch response.result {
                    case .success:
                        if let resData = response.data {
                            do {
                                let res = try JSONSerialization.jsonObject(with: resData)
                                print(res)
                            } catch let err {
                                print(err)
                            }
                        }
                        break
                    case .failure(let err):
                        print("Error occured", err)
                         completion(err)
                        break
                    }
                })

                break

            case .failure(let err):
                print("Error occured", err)
                completion(err)
                break
        }
    })

}

Я думаю, что что-то не так в том, как я посылаю массив userEvents, но я могу ошибаться.Может кто-нибудь помочь мне решить ошибку?

...