Я сделал. Но я получил ошибку, как то, что я объяснил раньше

я есть такой код ниже

func upload(){
    let img = UIImage(named: "1")
    let imgData = UIImageJPEGRepresentation(img!, 1)
    let data = imgData?.base64EncodedString()

    var request = URLRequest(url: URL(string: url)!)
    request.httpMethod = "POST"
    request.setValue("\(auth)", forHTTPHeaderField: "Authorization")
    request.setValue("application/xml", forHTTPHeaderField: "Content-Type")

    var postString = "<uploadrequest>"
    postString += "<folderid>123</folderid>"
    postString += "<folder_name>images</folder_name>"
    postString += "<image_byte>\(data!)</image_byte>"
    postString += "</uploadrequest>"

    request.httpBody = postString.data(using: .utf8)

    let configuration = URLSessionConfiguration.default
    let session = URLSession(configuration: configuration, delegate: self, delegateQueue: OperationQueue.main)

    let task = session.uploadTask(with: request, from: imgData!, completionHandler: {
        (data, response, error) -> Void in

        if let error = error {
            print(error)
            return
        }
        if let data = data {
            _ = self.parseJsonData(data: data)
        }
    })

    task.resume()
}

func urlSession(_ session: URLSession, task: URLSessionTask, didSendBodyData bytesSent: Int64, totalBytesSent: Int64, totalBytesExpectedToSend: Int64) {
    print("sent:", totalBytesSent, "from:", totalBytesExpectedToSend)

    let size = totalBytesSent / totalBytesExpectedToSend
    self.progressbar.progress = Float(size)
}

Моя цель состоит в том, чтобы загрузить изображение с помощью API и получить его прогресс загрузки. Изображение преобразуется в base64 и вставляется в<image_byte>\(data!)</image_byte> на постстроке API.

Тогда то, что я получил, было примерно так:

отправлено: 32768 от: 927220 отправлено: 65536 от: 927220 отправлено: 131072 от: 927220 отправлено: 163840 от: 927220 отправлено: 262144 от: 927220 отправлено: 294912 от: 927220 отправлено: 360448 от: 927220 отправлено: 393216 от: 927220 отправлено: 425984 от: 927220 отправлено: 491520 от: 927220 отправлено: 524288 от: 927220 отправлено: 557056 от: 927220 отправлено: 589824 от: 927220 отправлено: 622592 от: 927220 отправлено: 655360 от: 927220 отправлено: 688128 от: 927220 отправлено: 720896 от : 927220 отправлено: 786432 от: 927220 отправлено: 819200 от: 927220 отправлено: 851968 от: 927220 отправлено: 927220 от: 927220 Ошибка Домен = NSCocoaErrorDomain Код = 3840 "Текст JSON не начинался с массива или объекта, и опция, позволяющая разрешить установку фрагментов, не заданных «. UserInfo = {NSDebugDescription = Текст JSON не начинался с массива или объекта, и опция, позволяющая не устанавливать фрагменты.}

Но если я использую другие методы, подобные этому (без uploadTask), он работает хорошо, но не получил прогресса загрузки.

let task = URLSession.shared.dataTask(with: request, completionHandler: {
        (data, response, error) -> Void in

        if let error = error {
            print(error)
            return
        }
        if let data = data {
            _ = self.parseJsonData(data: data)
        }
    })

я пробовалAlamofire слишком.Alamofire с участиемrequest функция была успешной, но все равно не дала прогресса загрузки иAlamofire с участиемuploadФункция (multipartformData) делает эту ошибку:

responseSerializationFailed (причина: Alamofire.AFError.ResponseSerializationFailureReason.jsonSerializationFailed (ошибка: Ошибка домена = NSCocoaErrorDomain Code = 3840 "Недопустимое значение вокруг символа 3." UserInfo = {NSDebugDescription = Недопустимое значение для символа 3.}))

Я хочу знать, если я сделаю ошибку в своем коде. Не могли бы вы сказать мне, что мне делать с моим кодом? Или проблема была в моем API, потому что мой API просто принимаетbase64 код?

Если вы хотите увидеть мойAlamofire код, это былотам

Пожалуйста, кто-нибудь, помогите мне решить эту проблему.

Спасибо! :)

РЕДАКТИРОВАТЬ 1

Это мой результат по функции запроса (без функции загрузки)

{
    "media_preview" =     {
        "image_media" =         {
            fileid = 4928501;
            filename = "zhzvoHBb1ogda9bps13R5IavYiadCm.jpg";
            folderpath = "product\\66861/images800\\";
            height = 533;
            src = "zhzvoHBb1ogda9bps13R5IavYiadCm.jpg";
            width = 800;
        };
        "medium_media" =         {
            fileid = 4928503;
            filename = "zhzvoHBb1ogda9bps13R5IavYiadCm.jpg";
            folderpath = "product\\66861/images500\\";
            height = 333;
            src = "zhzvoHBb1ogda9bps13R5IavYiadCm.jpg";
            width = 500;
        };
        "small_media" =         {
            fileid = 4928503;
            filename = "zhzvoHBb1ogda9bps13R5IavYiadCm.jpg";
            folderpath = "\product\\66861/images300\\";
            height = 200;
            src = "/zhzvoHBb1ogda9bps13R5IavYiadCm.jpg";
            width = 300;
        };
        "source_media" =         {
            fileid = 4928499;
            filename = "zhzvoHBb1ogda9bps13R5IavYiadCm.jpg";
            folderpath = "\\product\\66861images\\";
            height = 666;
            src = "/zhzvoHBb1ogda9bps13R5IavYiadCm.jpg";
            width = 999;
        };
        "thumbnail_media" =         {
            fileid = 4928507;
            filename = "zhzvoHBb1ogda9bps13R5IavYiadCm.jpg";
            folderpath = \\product\\66861/thumb\\";
            height = 150;
        ,    src = "/zhzvoHBb1ogda9bps13R5IavYiadCm.jpg";
            width = 150;
        };
    };
    responsestatus =     {
        "access_token" = "<null>";
        code = 00;
        description = Success;
    };
}

РЕДАКТИРОВАТЬ 2 Это кодparseJsonData(data: Data)

func parseJsonData(data: Data) {
    do {
        let jsonResult = try JSONSerialization.jsonObject(with: data, options: JSONSerialization.ReadingOptions.mutableContainers) as? NSDictionary
        print(jsonResult!)
    } catch {
        print(error)
    }
}

Ответы на вопрос(2)

Ваш ответ на вопрос