2016-02-02 18 views
9

के लिए संदर्भ प्राप्त करें मैंने मल्टीपार्ट फ़ॉर्म डेटा में छवियों को अपलोड करने के लिए अलामोफ़ीयर का उपयोग किया है। मैं अपने लक्ष्य को प्राप्त करने में सफल हूं। प्रत्येक बार जब मैं एक छवि अपलोड करता हूं, तो मैं "uploadDocWebService" फ़ंक्शन को कॉल करता हूं। इसलिए फ़ंक्शन को बुलाए जाने की संख्या, छवियों की संख्या के बराबर होती है। मैं प्रत्येक कॉल के परिणाम की पहचान करने में निराश हूं। मेरी छवियों को सफलतापूर्वक अपलोड कर रहे हैं। यदि कोई सर्वर विफलता है, या इंटरनेट कनेक्शन विफलता अपलोड होने में विफल रहता है, तो मैं यह नहीं पहचान सकता कि मुझे कौन सी छवि को दृश्य से हटा देना चाहिए, जो विफल रहा है। मैं प्रत्येक छवि अपलोड के लिए पैरामीटर के रूप में indexPath पास करता हूं। लेकिन इससे पहले कि मैं पहली छवि अपलोड के परिणाम प्राप्त करने से पहले इंडेक्सपैथ नवीनतम छवि अपलोड को अद्यतन करता हूं। क्या कोई मुझे इस स्थिति के लिए बेहतर दृष्टिकोण सुझा सकता है।अलामोफ़ीयर अनुरोध के लिए एकाधिक कॉल, प्रत्येक कॉल

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) 
      } 
     } 
    ) 

} 

अगर मैं जानते हैं जो परिणाम के लिए जो फोन जुड़ा हुआ है, जो मुझे देखने से उस विशेष चित्र हटाने में मदद कर सकता:

यहाँ कोड मैं छवि अपलोड करने के लिए इस्तेमाल करते हैं।

+0

आपको प्रत्येक छवि के लिए अद्वितीय आईडी या कुछ छवि जो अद्वितीय रूप से प्रत्येक छवि के साथ जुड़ा हुआ होना चाहिए। उदाहरण के लिए, आपके पास एक अलग अपलोड ट्रैकिंग डिक्शनरी हो सकती है जिसमें छवि-आईडी को चाबियाँ और बूल के रूप में इसका मूल्य शामिल है। प्रारंभ में सभी मूल्य "झूठे" होंगे। जब भी एक छवि-आईडी के लिए अपलोड सफल होता है तो आप उस मान को "सत्य" पर सेट कर सकते हैं। – san

+0

मैंने पहले ही यह कोशिश की है। यदि कोई कनेक्शन या सर्वर विफलता है तो मुझे असफल होने वाली छवि आईडी वापस नहीं दी जाएगी। असफल छवियां एक से अधिक हो सकती हैं। –

+0

क्या आपको सफल अपलोड के लिए छवि-आईडी मिलती है? – san

उत्तर

3

आप मूल अनुरोध के लिए एक संदर्भ रखने की जरूरत है, अपलोड अनुरोध मुझे लगता है कि के लिए ही होना चाहिए। निम्नलिखित का प्रयास करें:

func uploadDocWebservice(fileUrl: NSURL , progressView : PWProgressView , index : String , imageData : NSData? , name : String , mimeType : String , uploadType : String) -> Request? { 
    return Alamofire.upload ... 
} 

तो फिर तुम बस अनुरोधों की एक सरणी हो सकता है अर्थात: var requests: [Request]()। Alamofire.upload/Alamofire .request को कॉल करते समय - यह एक अनुरोध ऑब्जेक्ट देता है।

फिर आप कर सकते हैं:

var requests: [Request]() 
let request = uploadDocWebservice(...) 
requests.append(request) 

तो आप कर सकते हैं बस सरणी के माध्यम से पाश और जाँच जो कुछ भी अनुरोध आप चाहते हैं।

संबंधित मुद्दे