Как отправить строки base64 в службу POST - Swift - PullRequest
0 голосов
/ 22 января 2019

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

этот пример:

{
  "dato1":"prueba@mail.com",
  "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()
}

plist конфигурации:

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

Параметры base64: k + 62cf7vQn8T8o / + tVqAnlz1NIC3JJ2qEHJpjNmlU0wJ1NaVme1ZSmtKyPNws * * .t0. * .5.

1 Ответ

0 голосов
/ 24 января 2019

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

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

Link конвертер base64 проще: Link 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
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...