我搜索了许多问题并应用了解决方案,但不知怎的,我的逻辑运行不正常。这是API调用中的预期结果:
我发送的电话是:
let parameters = [
"address": self.addressField.text ?? "",
"pharmacy_id": "\(pharmaID ?? 0)",
"is_default": "\(isDefault ?? 0)",
"cash_payment": "\(1)",
"is_home_delivery": "\(isDelivery ?? 0)"
] as [String : Any]
Alamofire.upload(multipartFormData:{ multipartFormData in
for key in parameters.keys {
let name = String(key)
if let val = parameters[name] as? String{
multipartFormData.append(val.data(using: .utf8)!, withName: name)
}
}
DispatchQueue.main.async {
for (image) in self.presImagesArray {
if let imageData = UIImageJPEGRepresentation(image, 0.5) {
multipartFormData.append(imageData, withName: "prescription[]", fileName: "image.jpeg", mimeType: "image/jpeg")
}
}
// for (image) in self.presImagesArray {
// multipartFormData.append(UIImageJPEGRepresentation(image, 0.1)!, withName: "prescription", fileName: "image.jpg", mimeType: "image/jpg")
// }
}
},
usingThreshold:UInt64.init(),
to:url,
method:.post,
headers:headers,
encodingCompletion: { encodingResult in
switch encodingResult {
case .success(let upload, _, _):
upload.responseJSON { response in
// if let result = response.result.value as? [String: AnyObject] {
// print(result["message"])
// }
print(response)
self.clearAllNotice()
self.successNotice("Success")
}
case .failure(let encodingError):
print(encodingError, encodingError.localizedDescription)
self.clearAllNotice()
self.errorNotice(encodingError.localizedDescription)
}
})
} else {
self.noticeInfo("Login Needed")
}
}
我遇到的问题是,该调用返回的消息为The prescription field is required.
,这意味着prescription[]
中的上传图片无法正常工作,后端人员说问题是在我的最后。
正如您从代码中看到的那样,我添加了一个for
循环,在其中我转换并发送图像数据,密钥为prescription[]
但仍然是我&# 39;得到这个回应。
答案 0 :(得分:1)
您的问题是您正在调用DispatchQueue.main.async
来创建图片。一旦离开此方法,此闭包的调用者就会继续,因此,由于您要异步添加图像,因此在添加图像之前已经发送了参数。
如果确实需要调用不同的队列,则需要使用DispatchQueue.main.sync
来阻止关闭,直到调度完成。但是,您不需要这样做,并且也不建议您在主/ UI线程上执行UIImageJPEGRepresentation
,因为它功能繁重并且您将被阻止用户界面。