Transmiterea unei imagini in format base64 catre server in Swift3

Avem o imagine. O transformam in string pentru a o putea transfera catre un server tert:

let image = UIImage(...)
let imageData = UIImageJPEGRepresentation(image!, 0.7)
let imageString:String = imageData!.base64EncodedString(options: NSData.Base64EncodingOptions.lineLength64Characters) as String

Ca si observatie, e important sa stabilim optiunea lineLength64Characters pentru codarea imaginii, acesta fiind formatul folosit de un server Apache pentru decodarea base64.

Avem deci in acest moment un string ce contine o imagine pe care dorim sa o trimitem spre un server web.

Folosim un request de tip POST in care specificam metoda de codare x-www-form-urlencoded:

request.addValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type")
request.addValue("application/json", forHTTPHeaderField: "Accept")

In momentul in care facem request-ul totul este frumos in aplicatia IOS insa pe server toate caracterele “+” sunt codate ” ” adica blank space. Nimeni nu ar observa acest lucru, mai ales ca nu apare nici un warning, nici o eroare pe device-ul IOS. Insa server-side, la decodificarea stringului base64 receptionat vom avea o eroare din cauza faptului ca nu poate fi scoasa imaginea de acolo.

Solutia?

Trebuie sa inlocuim in stringul base64 caracterul “+” cu “%2b” inainte de a face request-ul catre serverul web:

paramsStr = paramsStr.replacingOccurrences(of: "+", with: "%2b")

Share Button

Stefan

Leave a Reply

Your email address will not be published.