У меня проблема с отправкой строки изображения 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 . что ты имеешь в виду?
@ Эрик, да, но я не получил ответов с той же проблемой в es.stackoverflow.com/questions/231568/…
Найдите программу Postman и проверьте свой POST-запрос в этой программе.
@canister_exister ааа, мой запрос выполнен идеально, проблема только при отправке параметра в значении base64. Если параметр base64 отправил его пустым, служба отвечает хорошо
@canister_exister ты, но я использую этот метод для замены символов, но он не работает
Мое решение - изменить размер изображения и после создать строку 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
}
вы пробовали почтальона с такими же параметрами?