[ad_1]
I’m making an attempt to add picture utilizing URLSession with crucial params, it’s working in postman however not working in swift.
func requestNativeImageUpload() {
let testImage = UIImage(named: "sayHi")
let url = URL(string: "https://www.api.com/knowledge/savePickerData")
let boundary = generateBoundary()
var request = URLRequest(url: url!)
let parameters = ["pickerId": "100","walkerRfid": "10" ]
guard let mediaImage = Media(withImage: testImage!, forKey: "picture") else { return }
request.httpMethod = "POST"
request.allHTTPHeaderFields = [
"X-User-Agent": "ios",
"Accept-Language": "en",
"Accept": "application/json",
"Content-Type": "multipart/form-data; boundary=(boundary)",
]
let dataBody = createDataBody(withParameters: parameters, media: [mediaImage], boundary: boundary)
request.httpBody = dataBody
let session = URLSession.shared
session.dataTask(with: request) { (knowledge, response, error) in
if let response = response {
print(response)
}
if let knowledge = knowledge {
do {
let json = strive JSONSerialization.jsonObject(with: knowledge, choices: [])
print(json)
} catch {
print(error)
}
}
}.resume()
}
func generateBoundary() -> String {
return "Boundary-(NSUUID().uuidString)"
}
func createDataBody(withParameters params: [String: String]?, media: [Media]?, boundary: String) -> Knowledge {
let lineBreak = "rn"
var physique = Knowledge()
if let parameters = params {
for (key, worth) in parameters {
physique.append("--(boundary + lineBreak)")
physique.append("Content material-Disposition: form-data; title="(key)"(lineBreak + lineBreak)")
physique.append("(worth + lineBreak)")
}
}
if let media = media {
for picture in media {
physique.append("--(boundary + lineBreak)")
physique.append("Content material-Disposition: form-data; title="(picture.key)"; filename="(picture.fileName)"(lineBreak)")
physique.append("Content material-Sort: (picture.mimeType + lineBreak + lineBreak)")
physique.append(picture.knowledge)
physique.append(lineBreak)
}
}
physique.append("--(boundary)--(lineBreak)")
return physique
}
extension Knowledge {
mutating func append(_ string: String) {
if let knowledge = string.knowledge(utilizing: .utf8) {
append(knowledge)
}
}
}
struct Media {
let key: String
let fileName: String
let knowledge: Knowledge
let mimeType: String
init?(withImage picture: UIImage, forKey key: String) {
self.key = key
self.mimeType = "picture/jpg"
self.fileName = "(arc4random()).jpeg"
guard let knowledge = picture.jpegData(compressionQuality: 0.5) else { return nil }
self.knowledge = knowledge
}
}
in Postman
[ad_2]

