загрузка изображения с использованием alamofire показывает эту проблему (причина: Alamofire.AFError.ResponseSerializationFailureReason.inputDataNilOrZeroLength) - PullRequest
0 голосов
/ 23 октября 2018

я пытаюсь загрузить изображение на сервер мой код

@IBAction func startUploadClicked(_ sender: UIButton) {

    // get image form uiimageview 
    let image = theImage.image

    // and here is the api example provided by my backend developer 

   //{
   //"Id":11,
   //"FileName":"Hydrangeas.jpg",
   //"ImageData":"base64string"
   //}

    let imageData = convertImageToBase64(image: image!)
    let imageNewData = UIImageJPEGRepresentation(image!, 0.7)
    let Id = "\(12)"
    let FileName = "image.jpg"




    let headers = [
        "SecurityToken": UserDefaults.standard.string(forKey: "SecurityToken")!,
        "api_key": "Ml3BHS17tJ89Y3Tf4QC3",
        "Content-Type":"application/json"
    ]


    let parameters = [
        "Id":"\(12)",
        "FileName":"image.jpg",
        "ImageData":"\(imageData)"
        ]


    Alamofire.upload(
        multipartFormData: { multipartFormData in

            for (key, value) in parameters {
                multipartFormData.append((value.data(using: String.Encoding.utf8)!), withName: key)
            }

    },
        to: "https://serverName/AddPhoto", headers: headers,
        encodingCompletion: { encodingResult in
            switch encodingResult {
            case .success(let upload, _, _):
                upload.responseJSON { response in

                    debugPrint(response)
                }
            case .failure(let encodingError):

                print(encodingError)
            }
    }
    )
}

это то, что отображается в команде после запуска кода

[Запрос]: POST https://serverName/AddPhoto [Ответ]: {URL: https://serverName/AddPhoto} {Код состояния: 413, Заголовки {"Content-Length" = (0);Дата = («Понедельник, 22 октября 2018 20:52:43 GMT»);Сервер = («Microsoft-IIS / 8.5»);"X-Powered-By" = ("ASP.NET");}} [Данные]: 0 байт [Результат]: НЕИСПРАВНОСТЬ: responseSerializationFailed (причина: Alamofire.AFError.ResponseSerializationFailureReason.inputDataNilOrZeroLength) [Временная шкала]: Временная шкала: {«Время начала запроса»: 561934363.529, «Время начального ответа»: 56Время выполнения запроса ": 561934364.234," Время завершения сериализации ": 561934364.241," Время ожидания ": 0,307 с," Продолжительность запроса ": 0,705 с," Продолжительность сериализации ": 0,006 с," Общая продолжительность ": 0,711 с}

1 Ответ

0 голосов
/ 23 октября 2018

, для которого Ганна ищет это в будущем, я решил это, сделав обычный запрос Alamofire вместо использования Alamofire.upload, потому что я уже конвертировал изображение в строку здесь мой новый код

@IBAction func startUploadClicked(_ sender: UIButton) {


    let image = theImage.image
    let imageData = convertImageToBase64(image: image!)


    let headers = [
        "SecurityToken": UserDefaults.standard.string(forKey: "SecurityToken")!,
        "api_key": "Ml3BHS17tJ89Y3Tf4QC",
        "Content-Type":"application/json"
    ]


    let parameters = [
        "Id":"\(balaghID)",
        "FileName":"image.jpg",
        "ImageData":"\(imageData)"
        ]

    Alamofire.request("https://serverName/addPhoto", method: .post, parameters: parameters, encoding: JSONEncoding.default, headers: Constant.Header).responseJSON { response in



        if let JSON = response.result.value as? [String:Any] {

            if let ActionResult = JSON["ActionResult"] as? [String:Any]{

                if let Errcode = ActionResult["Errcode"] as? NSNumber {

                    if Errcode != NSNumber(value: 0) {

                        Helper.showAlert("bad operation", message: "error \(ActionResult["ErrDescription"]!)", VC: self)

                    } else {

                        Helper.showAlert("Great you make it", message: "

(ActionResult ["ErrDescription "]!)", VC: self)

                    }

                }

            }

        }

    }

}
...