I'm using Alamofire to upload image on server, this method working fine and I have already used in many projects.
I have used following code to upload image on my server using multiform data.
Alamofire.upload( multipartFormData: { multipartFormData in
for (key, value) in parameters {
if let data = (value as! String).data(using: .utf8) {
multipartFormData.append(data, withName: key)
}
}
let imageData = image?.pngData()
multipartFormData.append(imageData!, withName: "profile_image", fileName: "profileImage", mimeType: "")
}, to: getURL(.addProfile), headers: getHeaders(), encodingCompletion: { encodingResult in
switch encodingResult {
case .success(let upload, _, _):
upload.response(completionHandler: { (defaultDataResponse) in
guard let httpResponse = defaultDataResponse.response else {
completion(nil, defaultDataResponse.error)
return
}
if httpResponse.statusCode == 200 {
do {
let genericModel = try JSONDecoder().decode(ProfileImageModel.self, from: defaultDataResponse.data!)
completion(genericModel, nil)
} catch {
completion(nil, error)
}
} else {
completion(nil, defaultDataResponse.error)
}
})
case .failure(let encodingError):
completion(nil, encodingError)
}
})
This works fine.
My issue is here, where extra parameter passing in api.
for (key, value) in parameters {
if let data = (value as! String).data(using: .utf8) {
multipartFormData.append(data, withName: key)
}
}
Above code will convert string value to data and append to multipartFormData
. And it's works for following type of request structure.
{
"first_name": "ABC",
"last_name": "XYZ",
"bio": "iOS Developer"
}
What to do when I have following type of request structure?
{
"first_name": "ABC",
"last_name": "XYZ",
"bio": "iOS Developer"
"location": {
"full_address": "My Location",
"latitude": "23.0000",
"longitude": "76.0000"
}
}
Please help to achieve this.