как загрузить файл и передать данные в параметре в Alamofire - swift 5
Мне нужно решение этой проблемы. Я хочу загрузить изображение на сервер с данными внутри параметра
Это запрос на почтальона
Это мое решение ::
func createPhoto(name : String , email : String,gender:String,region:String,bod:String,activity_name:String,organisation_name:String,photo: UIImage, completion: @escaping (_ error: Error?, _ success: Bool)->Void) {
var Token : String?
var tasksMO = [NSManagedObject]()
let request = NSFetchRequest<NSFetchRequestResult>(entityName: "ConfirmActivationEntity")
do {
let results = try pe.context.fetch(request)
tasksMO = results as! [NSManagedObject]
for taskmo in tasksMO {
Token = (taskmo.value(forKey: "access_token") as! String )
}
print("assbil")
} catch {
print("fild")
}
print(" Token :\(Token!)")
let headers : HTTPHeaders = ["Authorization":"Bearer \(Token!)","X-HTTP-Method-Override":"PUT","Accept-Language" : Locale.current.languageCode ?? "ar", "Content-Type" : "application/x-www-form-urlencoded","Accept" : "application/json"]
let parameters : Parameters = ["name" : name,"region":region,"activity_id":ActivityCode!,"organization_id":OrganizationCode!,"gender":gender,"job_id":JobCode!,"interest_id":IntrestedCode!,"organisation_name":organisation_name,"activity_name":activity_name,"bod":bod,"city":region,"email":email,"profile_pic":photo]
guard let url = URL(string: "\(UrlApi.url)\(UrlApi.crateUser)") else { return }
Alamofire.upload(multipartFormData: { (form: MultipartFormData) in
for (key, value) in parameters {
form.append("\(value)".data(using: String.Encoding.utf8)!, withName: key as String)
}
// if let data = imagedata{
// multipartFormData.append(data, withName: "imagename", fileName: "imagename.jpg", mimeType: "image/jpeg")
// }
if let data = photo.jpegData(compressionQuality: 0.5) {
form.append(data, withName: "profile_pic", fileName: "photo.png", mimeType: "image/png")
}
}, usingThreshold: SessionManager.multipartFormDataEncodingMemoryThreshold, to: url,method: .post, headers: headers) { (result: SessionManager.MultipartFormDataEncodingResult) in
switch result {
case .failure(let error):
print(error)
completion(error, false)
case .success(request: let upload, streamingFromDisk: _, streamFileURL: _):
upload.uploadProgress(closure: { (progress: Progress) in
print(progress)
})
.responseJSON(completionHandler: { (response: DataResponse<Any>) in
switch response.result
{
case .failure(let error):
print(error)
completion(error, false)
case .success(let value):
let json = JSON(value)
print(json)
if let status = json["status"].toInt, status == 1 {
// success
print("Upload Succeed")
completion(nil, true)
} else {
print("Upload Failed")
completion(nil, false)
}
}
})
}
}
}
И этот ответ приходит от подача:
responseSerializationFailed(reason: Alamofire.AFError.ResponseSerializationFailureReason.jsonSerializationFailed(error: Error Domain=NSCocoaErrorDomain Code=3840 "Invalid value around character 0." UserInfo={NSDebugDescription=Invalid value around character 0.}))
Я использую капсулу Alamofire и капсулу Swifty Json с iOS 13, swift 5 и Xcode 11
Пожалуйста, помогите мне:)