Tôi đã sử dụng Alamofire để tải lên hình ảnh trong dữ liệu biểu mẫu nhiều phần. Tôi thành công trong việc đạt được mục tiêu của mình. Mỗi khi tôi tải lên một hình ảnh, tôi gọi hàm "uploadDocWebService". Vì vậy, số lần hàm được gọi, bằng với số lượng hình ảnh. Tôi vô vọng trong việc xác định kết quả của mỗi cuộc gọi. Hình ảnh của tôi được tải lên thành công. Trong trường hợp có sự cố máy chủ hoặc lỗi kết nối internet không tải lên được, tôi không thể xác định hình ảnh nào tôi nên xóa khỏi chế độ xem, điều đó đã thất bại. Tôi vượt qua indexPath như một tham số cho mỗi tải lên hình ảnh. Nhưng indexPath đó sẽ cập nhật lên hình ảnh tải lên mới nhất trước khi tôi nhận được kết quả tải lên hình ảnh đầu tiên. Có thể ai đề nghị tôi một cách tiếp cận tốt hơn cho tình huống này.Nhiều cuộc gọi đến yêu cầu Alamofire, nhận tham chiếu cho mỗi cuộc gọi
Đây là mã tôi sử dụng để tải lên hình ảnh:
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)
}
}
)
}
Nếu tôi nhận được để biết mà kết quả có liên quan để mà gọi, mà có thể giúp tôi xóa hình ảnh cụ thể khỏi tầm nhìn.
Bạn cần có id duy nhất cho mỗi hình ảnh HOẶC một thứ gì đó được liên kết duy nhất với từng hình ảnh. Ví dụ: bạn có thể có một từ điển theo dõi tải lên riêng biệt chứa các ID hình ảnh làm khóa và giá trị của nó dưới dạng Bool. Ban đầu tất cả các giá trị sẽ là "sai". Bất cứ khi nào tải lên thành công cho một Id hình ảnh, bạn có thể đặt giá trị đó thành "true". – san
Tôi đã thử điều này. Trong trường hợp có kết nối hoặc lỗi máy chủ, tôi sẽ không được trả lại id hình ảnh không thành công. Hình ảnh không thành công có thể nhiều hơn một hình ảnh. –
Bạn có nhận được hình ảnh-Id để tải lên thành công không? – san