Как отправить строки base64 в службу POST - Swift

У меня проблема с отправкой строки изображения base64 в почтовый сервис в swift 4. Этот сервис получил «строку json post» и параметры в base64.

этот пример:

{
  "dato1":"[email protected]",
  "dato2":1,
  "video":{
    "NomVideo":"video.mp4",
    "TipVideo":"mp4",
    "ArchVideo":"Base64"
  },
  "listaImagen":[{
    "NomImagen":"imagen1.jpg",
    "TipImagen":"jpg",
    "ArchImagen":"JKANSDJKASNDASKDNSAJKDNASJKNSA"
  },
  {
    "OrdImagen":2,
    "NomImagen":"imagen2.jpg",
    "TipImagen":"jpg",
    "ArchImagen":"base64"
  }],
  "ObjetoPrincipal":{
    "objetoDato1":"akmdklamd",
    "objetoDato2":"lakmsksamk"
  }
}

Но когда я отправляю параметры в base64, служба не возвращает ответ, а если не отправлять параметры в base64, служба отвечает правильно.

Моя почта

    class func postJsonWithHeaderAuthorization(_ url :NSString, data :NSString, authorizationParam: String, closure: @escaping (Data?, URLResponse?, Error?) -> ()){

    let url = URL(string: url as String)

    let request = NSMutableURLRequest(url: url! )

    request.httpMethod = POST
    request.setValue("application/json", forHTTPHeaderField: "Content-Type")
    request.setValue("application/json", forHTTPHeaderField: "Accept")
    request.setValue(authorizationParam, forHTTPHeaderField: "authorization")


    let data = data.data(using: String.Encoding.utf8.rawValue)


    let task = URLSession.shared.uploadTask(with: request as URLRequest,from: data, completionHandler: { (data,response, error ) in

        closure(data ,response, error)
        return
    })

    task.resume()
}

конфигурация списка:

Настройки безопасности транспорта приложений Разрешить произвольные загрузки - ДА

Параметры base64: k+62cf7vQn8T8o/+tVqAnlz1NIC3JJ2qEHJpjNmlU0wJ1NaVme1ZSmtKyPNADtSP7s17Z4eGNB0wf9OsP/ota8 ........(и т. д. и т. д.)

вы пробовали почтальона с такими же параметрами?

canister_exister 22.01.2019 19:11

@canister_exister . что ты имеешь в виду?

Rogelio Sanchez 22.01.2019 19:19

@ Эрик, да, но я не получил ответов с той же проблемой в es.stackoverflow.com/questions/231568/…

Rogelio Sanchez 22.01.2019 19:19

Найдите программу Postman и проверьте свой POST-запрос в этой программе.

canister_exister 22.01.2019 19:21

@canister_exister ааа, мой запрос выполнен идеально, проблема только при отправке параметра в значении base64. Если параметр base64 отправил его пустым, служба отвечает хорошо

Rogelio Sanchez 22.01.2019 19:23
stackoverflow.com/a/47177266/4311935 нужно заменить + и /
canister_exister 22.01.2019 19:24

@canister_exister ты, но я использую этот метод для замены символов, но он не работает

Rogelio Sanchez 22.01.2019 20:25
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
7
786
1

Ответы 1

Мое решение - изменить размер изображения и после создать строку base 64, но я меняю службу на API Alamofire.

Но если я отправлю всю цепочку в несжатом виде, у меня возникнут проблемы.

Конвертер ссылок base64 проще: Ссылка на конвертер github base 64

let imageRes = imageWithImage(image: imagenTomada, scaledToSize: CGSize(width: 100, height: 100))

    let string64 = imageRes.base64(format: .png)!

мой метод

    private func service(){

    let objetDTO = crearobjetDTO()

    var parametersImagenes: Array<Dictionary<String, AnyObject>> = Array<Dictionary<String, AnyObject>>()

    if objetDTO.LstImagen != nil && objetDTO.LstImagen!.count > 0 {
        for imagenTmp in objetDTO.LstImagen! {

            let parametersImagen: Dictionary<String, AnyObject> =  ["Image Ord":imagenTmp.OrdImagen as AnyObject,"NameImg":imagenTmp.nameImg as AnyObject, "ImageType": imagenTmp.TipImagen as AnyObject, "base64Img": imagenTmp.archv as AnyObject]

            parametersImagenes.append(parametersImagen)
        }

    }


    let params: Dictionary<String, AnyObject> = [ "param1" : objetDTO.param1 as AnyObject, "param2" : objetDTO.param2 as AnyObject, "LstImagen": parametersImagenes as AnyObject]


    let urlString = "\(miURLservice)"
    let url = URL.init(string: urlString)



    Alamofire.request(url!, method: .post, parameters: params , encoding: JSONEncoding.default, headers: headers()).responseJSON { response in

        let res = response.data
        switch response.result
        {
        case .success(let json):
            DispatchQueue.main.async {
                let jsonData = json as! NSDictionary
                print(jsonData)


                let decoder = JSONDecoder()
                self.ObjResponseDTO = try! decoder.decode(ObjectDTOResponseCustom.self, from: res!)

                print("cotResponse")
                // continue.....
            }

            break
        case .failure(let error):
            //self.errorFailer(error: error)
            print(error)

            break
        }
    }
}

 func headers()->HTTPHeaders{
    return ["Authorization": " \(String(describing: kajndjasndlasjkdnasjkdnsajkdnsajkndasjkd))",
            "Content-Type": "application/json"] as HTTPHeaders
}

Другие вопросы по теме