簡體   English   中英

在Alamofire中上傳包含多部分表單數據的多張圖片時出錯

[英]Getting error while uploading multiple images with multipart form data in Alamofire

我搜索了許多問題並應用了解決方案,但是我的邏輯無法正常工作。 這是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[]上傳圖片prescription[]不能正常工作,而后端人員則說問題出在我的末端。

從代碼中可以看到,我添加了一個for循環,並且在其中轉換並發送了圖像數據,關鍵是prescription[]但仍然得到了這個響應。

您的問題是您正在調用DispatchQueue.main.async來創建圖像。 退出此方法后,此閉包的調用方將繼續,因此,由於要異步添加圖像,因此在添加圖像之前已經發送了參數。

如果確實需要調用其他隊列,則需要使用DispatchQueue.main.sync來阻止關閉,直到分派完成為止。 但是,您不需要這樣做,也不建議您在主/ UI線程上執行UIImageJPEGRepresentation ,因為這是一項繁重的功能,並且會阻塞UI。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM