Użyłem Alamofire do przesyłania zdjęć w postaci wieloczęściowych danych. Osiągam sukces w osiąganiu celu. Za każdym razem, gdy ładuję obraz, nazywam funkcję "uploadDocWebService". Tak więc liczba wywołań funkcji jest równa liczbie obrazów. Beznadziejnie identyfikuję wynik każdego połączenia. Moje obrazy zostały pomyślnie przesłane. W przypadku awarii serwera lub błędu połączenia internetowego wysyłanie nie powiedzie się, nie mogę zidentyfikować obrazu, który powinien usunąć z widoku, który się nie powiódł. Przekażę parametr indexPath jako parametr dla każdego przesyłania obrazów. Ale to polecenie IndexPath aktualizuje najnowszy obraz przesyłany, zanim otrzymam wynik pierwszego przesłania obrazu. Czy ktokolwiek może zaproponować mi lepsze podejście do tej sytuacji.Wiele połączeń z żądaniem Alamofire, uzyskaj referencje dla każdego połączenia
Oto kod używać do przesyłania obrazu:
func uploadDocWebservice(fileUrl: NSURL , progressView : PWProgressView , index : String , imageData : NSData? , name : String , mimeType : String , uploadType : String){
let url = "\(kBaseURL)\(uploadDocsUrl)"
var type = String()
var networkGroupId = String(SingletonClass.sharedInstance.selectedNetworkId!)
if SingletonClass.sharedInstance.groupPopUp == true {
type = "group"
networkGroupId = String(SingletonClass.sharedInstance.selectedSubNetworkOrGroup!)
}else {
type = "network"
}
Alamofire.upload(
.POST,
url,
multipartFormData: { multipartFormData in
if uploadType == "Image" {
multipartFormData.appendBodyPart(data: imageData! , name: "file", fileName: name, mimeType: mimeType)
}else {
multipartFormData.appendBodyPart(fileURL: fileUrl, name: "file")
}
multipartFormData.appendBodyPart(data:"\(SingletonClass.sharedInstance.tokenId)".dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)!, name :"token")
multipartFormData.appendBodyPart(data:"\(type)".dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)!, name :"networkGroup")
multipartFormData.appendBodyPart(data:"\(networkGroupId)".dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)!, name :"networkGroupId")
},
encodingCompletion: { encodingResult in
switch encodingResult {
case .Success(let upload, _, _):
upload.progress { bytesRead, totalBytesRead, totalBytesExpectedToRead in
let ratio: Float = Float(totalBytesRead)/Float(totalBytesExpectedToRead)
// Call main thread.
dispatch_async(dispatch_get_main_queue(), {
progressView.progress = ratio
})
}
upload.responseJSON { response in
let dataString = NSString(data: response.data!, encoding:NSUTF8StringEncoding)
print(dataString)
self.edited = true
do{
let json = try NSJSONSerialization.JSONObjectWithData(response.data!, options: .MutableLeaves) as? NSDictionary
if let success = json!["success"] as? Int {
if success == 1 {
let id = json!["response"]!.objectForKey("id") as! String
let docName = "\(json!["response"]!.objectForKey("name") as! String).\(json!["response"]!.objectForKey("ext") as! String)"
let dic = ["name" : docName , "Id" : id]
self.uploadedDocsIdArray.addObject(dic)
self.uploadedArrayJustNames.addObject(docName)
print(self.uploadedDocsIdArray)
}else {
// delete image from view here
}
}
}catch{
// delete image from view here
invokeAlertMethod("Error", msgBody: "Invalid Json", delegate: self)
}
}
case .Failure(let encodingError):
print(encodingError)
}
}
)
}
Jeśli mogę wiedzieć, który wynik jest związany z którym wezwanie, które mogłyby mi pomóc usunąć ten konkretny obraz z pola widzenia.
Musisz mieć unikalny identyfikator dla każdego obrazu LUB coś, co jest jednoznacznie powiązane z każdym obrazem. Na przykład możesz mieć oddzielny słownik śledzenia przesyłania zawierający identyfikatory obrazów jako klucze i ich wartość jako Bool. Początkowo wszystkie wartości będą "fałszywe". Za każdym razem, gdy przesyłanie powiedzie się dla identyfikatora obrazu, możesz ustawić tę wartość na "true". – san
Próbowałem już tego. W przypadku wystąpienia błędu połączenia lub serwera nie zostanie zwrócony identyfikator obrazu, który się nie powiódł. Obrazy nieudane mogą być więcej niż jeden. –
Czy otrzymujesz identyfikator obrazu do pomyślnego przesłania? – san