Эта проблема возникает в некоторых устройствах, где в нашем приложении есть функция, при которой пользователь добавляет свою фотографию продукта вместе с некоторыми другими параметрами запроса с помощью серверных API. Эта функциональность прекрасно работает с большинством устройств, а именно iPhone6 (v12.3.1), iPhone X (v12.3.1), но в некоторых случаях мы получаем проблему / ошибку при обработке изображения на iPhone7 (v12.4 / v12.3.1).
мы ожидаем, что несколько изображений (максимальное количество: 2) от разных пользователей будут одновременно загружены на наш сервер multipart. в настоящее время только один процесс обработки изображений на нашем сервере.
Alamofire Environment
Версия Alamofire: Alamofire (4.7.2)
Версия Xcode: 10.2.1
Версия Swift: 4 & 4 +
Платформа (ы), работающие под управлением Alamofire: iOS
Версия macOS: 10.14.5
func callMultiPartApi() {
self.view.isUserInteractionEnabled = false
GlobalData.sharedInstance.showLoader()
let url = "\(BASE_DOMAIN)/"
var headers: HTTPHeaders = [
if defaults.object(forKey: "authKey") == nil{
headers = [
"authKey":""
]
}else{
headers = [
"authKey":defaults.object(forKey: "authKey") as! String,
//"Content-Length": "10000000"
]
}
let sessionManager = GlobalVariables.sessionManager
sessionManager.upload(multipartFormData: { (multipartFormData) in
let reqDic:NSDictionary = self.perpareRequestData()
print("product total key \(reqDic.allKeys)")
for dicKey in reqDic.allKeys {
let key:String = dicKey as! String
print("product key \(key)")
if key != "product_img" && key != "docs" && key != "price_chartImg" {
let value:String = reqDic[key]as! String
multipartFormData.append(value.data(using: String.Encoding.utf8)!, withName: key)
}
}
let productName:String = reqDic["product_name"] as? String ?? ""
let productDoc:NSArray = reqDic["docs"] as? NSArray ?? []
var productDocCount:Int = -1
if productDoc.count>0{
for valueData in productDoc {
productDocCount = productDocCount+1
let dt:Data = valueData as!Data
multipartFormData.append(dt as Data, withName: "docs[\(productDocCount)]", fileName: "productdoc", mimeType: "application/pdf")
}}
let productImage:NSArray = reqDic["product_img"] as? NSArray ?? []
var productImageCount:Int = -1
if productImage.count>0{
for valueData in productImage {
productImageCount = productImageCount+1
let dt:Data = valueData as!Data
let productName:String = reqDic["product_name"] as? String ?? ""
let imageName:String = productName.trimmingCharacters(in: .whitespaces) + String(self.toMillis())
multipartFormData.append(dt as Data, withName: "product_img[\(productImageCount)]", fileName: imageName + ".jpg", mimeType: "image/*")
}
}else{
let imageName:String = productName.trimmingCharacters(in: .whitespaces) + String(self.toMillis())
multipartFormData.append("".data(using: String.Encoding.utf8)!, withName: "product_img[\(productImageCount)]", fileName: imageName + ".jpg", mimeType: "image/*")
}
}, usingThreshold: 0, to: url, method: HTTPMethod.post, headers: headers) { (result) in
self.view.isUserInteractionEnabled = true
print(result)
switch result {
case .success(let upload, , ):
upload.responseJSON { response in
GlobalData.sharedInstance.dismissLoader()
print(response.request)
print(response.data) // server data
print(response.result) // result of response serialization
//
print(response.error.debugDescription) // result of response serialization
if let JSON = response.result.value {
print("JSON: \(JSON)")
let dic:NSDictionary = JSON as! NSDictionary
let isSuccess:Bool = dic["success"] as? Bool ?? false
if isSuccess{
self.showAlertView(message: dic["message"] as?String ?? "Your request completed successfully" )
GlobalData.sharedInstance.dismissLoader()
}else {
GlobalData.sharedInstance.dismissLoader()
self.showAlertView(message: dic["message"] as?String ?? "Something went wrong" )
}
}else{
GlobalData.sharedInstance.dismissLoader()
self.showAlertView(message: "Something went wrong")
}
}
case .failure(let encodingError):
GlobalData.sharedInstance.dismissLoader()
self.showAlertView(message: "Something went wrong")
print(encodingError)
}
}
}