Çok yollu form verilerinde resim yüklemek için Alamofire kullandım. Hedefime ulaşmada başarılıyım. Her görüntüyü yüklediğimde "uploadDocWebService" işlevini çağırırım. Böylece, işlevin çağrılma sayısı, görüntü sayısına eşittir. Her aramanın sonucunu belirlerken umutsuzum. Resimlerim başarıyla yüklendi. Bir sunucu arızası veya yükleme başarısız olduğunda internet bağlantısı başarısız olursa, görüntüden hangi görüntüyü silmem gerektiğini belirleyemiyorum, bu da başarısız oldu. Her bir resim yüklemesi için indexPath parametresini geçiririm. Ancak, ilk resim yüklemesinin sonucunu almadan önce, bu dizinYolu en son resim yüklemesini günceller. Herhangi biri bana bu durum için daha iyi bir yaklaşım önerebilir. Bir Alamofire isteğine yapılan birden fazla çağrı, her bir çağrı için referans alın
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)
}
}
)
}
Bilmek alırsanız
hangi çağırmak için ilişkili sonuç, hangi beni görünümden söz konusu görüntüyü silmek yardımcı olabilir: Burada Ben resim yüklemesi için kullanmak koddur.
Her bir görüntü için benzersiz bir kimliğiniz VEYA her görüntü ile benzersiz bir şekilde ilişkilendirilmiş bir şeyiniz olması gerekir. Örneğin, anahtar olarak image-Ids ve bir Boole değeri içeren ayrı bir yükleme izleme sözlüğüne sahip olabilirsiniz. Başlangıçta tüm değerler "yanlış" olacaktır. Bir görüntü kimliği için yükleme başarılı olduğunda, bu değeri "doğru" olarak ayarlayabilirsiniz. – san
Bunu daha önce denedim. Bir bağlantı veya sunucu hatası olması durumunda, başarısız olan görüntü kimliğine geri dönmeyeceğim. Başarısız görüntüler birden fazla olabilir. –
Başarılı bir yükleme için resim kimliği alıyor musunuz? – san