Многокомпонентная обработка изображений - PullRequest
0 голосов
/ 11 октября 2019

Эта проблема возникает в некоторых устройствах, где в нашем приложении есть функция, при которой пользователь добавляет свою фотографию продукта вместе с некоторыми другими параметрами запроса с помощью серверных 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)
        }
    }

}
...