Я использую Alamofire для загрузки изображения на сервер, этот метод работает нормально, и я уже использовал во многих проектах.
Я использовал следующий код для загрузки изображения на свой сервер с использованием мультиформных данных.
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)
}
})
Это прекрасно работает.
Моя проблема здесь, когда передача дополнительных параметров происходитapi.
for (key, value) in parameters {
if let data = (value as! String).data(using: .utf8) {
multipartFormData.append(data, withName: key)
}
}
Приведенный выше код преобразует строковое значение в данные и добавляет к multipartFormData
.И это работает для следующего типа структуры запроса.
{
"first_name": "ABC",
"last_name": "XYZ",
"bio": "iOS Developer"
}
Что делать, если у меня следующий тип структуры запроса?
{
"first_name": "ABC",
"last_name": "XYZ",
"bio": "iOS Developer"
"location": {
"full_address": "My Location",
"latitude": "23.0000",
"longitude": "76.0000"
}
}
Пожалуйста, помогите достичь этого.