2016-04-04 14 views
1

Ich arbeite daran, mehrere Bilder an Backend mit Alamofire senden. Ich habe Base64 Bilderfolgen in einem NSMutableArray hinzugefügt. Jetzt Ich versuche, dieses Array von Zeichenfolgen an Server zu senden, aber es funktioniert nicht.Hochladen Array mit Base64String codiert mehrere Bilder mit Alamofire

Ich habe versucht, auf diese Weise ein einzelnes Bild hochladen und es funktioniert super cool, aber warum nicht eine Reihe von Bildern.

Bildabgreifoperation -

func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]) 
    { 
     if let pickedImage = info[UIImagePickerControllerOriginalImage] as? UIImage 
     { 
      imageView.contentMode = .ScaleAspectFit 
      imageView.image = pickedImage 
      slctdImage = pickedImage 

     } 

     dismissViewControllerAnimated(true, completion: nil) 

     uploadImage(slctdImage) 


    } 

Hochladen

func uploadImage(image:UIImage) 
    { 

     let pic :NSData = UIImageJPEGRepresentation(image, 0.5)! 

     let str = pic.base64EncodedStringWithOptions(NSDataBase64EncodingOptions(rawValue: 0)) 

     //imageArray is declared as var imageArray = NSMutableArray() 

     imageArray.addObject(str) 


     //when imageArray count reaches 3 I send the images 
     if imageArray.count==3 
     { 

     let parameters = [ 
      "task": "doNotification", 
      "image" : imageArray, 
      "select_category" : "exams", 
      "select_type" : "quarterly", 
      "class" : "1", 
      "repliable" : "0", 
      "select_students" : ["25","26"], 
      "select_group" : "Super Users", 
      "title" : "Hello", 
      "text" : "asdfsdf", 
      "date" : "2015-12-15", 
     "time" : "10:50 AM"] 


     Alamofire.request(.POST, UrlClass.baseUrl, parameters:parameters) .response { 
      (request, response, data, error) in 

      // self.startParsing(data!) 

      print(response) 


     } 
    } 

    } 

So, wie dieses Problem zu lösen? Bitte schlagen Sie Änderungen am Code oder auf andere Weise vor.

+0

Sind Sie sicher, dass der Endpunkt, den Sie anrufen, mehrere Bilder gleichzeitig sendet? Wenn dies der Fall ist, würde ich davon ausgehen, dass sie als MultipartFormData gesendet werden müssen. – cnoon

Antwort

2

Verwendung Nach Codebild auf den Server

let image = UIImage(named:"testImage") 
    Alamofire.upload(
     .POST, 
     URL, 
     multipartFormData: { multipartFormData in 
      multipartFormData.appendBodyPart(data: UIImageJPEGRepresentation(image, 1)!, name: "imageFile", 
       fileName: "image.jpg", mimeType: "image/jpeg") 
     }, 
     encodingCompletion: { encodingResult in 
      switch encodingResult { 
      case .Success(let upload, _, _): 
       upload.progress { bytesWritten, totalBytesWritten, totalBytesExpectedToWrite in 
        dispatch_async(dispatch_get_main_queue()) { 
         let percent = (Float(totalBytesWritten)/Float(totalBytesExpectedToWrite)) 
         //progress(percent: percent) 
         print(percent) 
        } 
       } 
       upload.validate() 
       upload.responseJSON { response in 
        if response.result.error != nil { 
         // failure 

        } else { 
          // success 

        } 

       } 

      case .Failure(let encodingError): 
       print(encodingError) 
       //failure 
      } 
     } 
    ) 

} 

Für mehrere Bilder

Alamofire.upload(
      .POST, 
      urlString, 
      multipartFormData: { multipartFormData in 
       multipartFormData.appendBodyPart(data: "122222".dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)!, name :"Id") 
       multipartFormData.appendBodyPart(data: "test1111".dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)!, name :"sId") 

       multipartFormData.appendBodyPart(data: "", name :"ContractorIds") 
       multipartFormData.appendBodyPart(data:date.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)!, name :"ExpectedOn") 
       multipartFormData.appendBodyPart(data:date.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)!, name :"ExpiresOn") 


       multipartFormData.appendBodyPart(data: data.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)!, name :"Notes") 

       for image in images { 
        if let imageData = UIImageJPEGRepresentation(image, 0.05) { 
         multipartFormData.appendBodyPart(data: imageData, name: "file", fileName: "file.jpeg", mimeType: "image/jpeg") 
        } 
       } 
      }, 
+0

Sie können Parameter senden, indem Sie an multipartFromData Array anfügen –

+0

Ebenso können Sie Code für das Hochladen mehrerer Bilder erwähnen. –

+0

Muss ich eine spezielle Kodierung auf der Backend-Seite schreiben? –

0

hier zum Hochladen ist eine andere Version als ich Problem in Server-Seite konfrontiert mehrere Bilder zu lesen:

Alamofire.upload(multipartFormData: { (multipartFormData) in 
     // Sending parametes with images 
     multipartFormData.append(jsonString.data(using: String.Encoding.utf8)!, withName: "parameters") 

     for (key, value) in parameters { 
      if let files = value as? Array<Any>, key == "files" { 

       for i in files.enumerated() { 
        let image = UIImage(named: "\(i.element)") 

        // add image 
        multipartFormData.append(UIImageJPEGRepresentation(image!, 1)!, withName: "file" , fileName: "\(NSUUID().uuidString)" , mimeType: "image/jpeg") 
        // if you face problem add below lines as to make sepration between two images 
        multipartFormData.append("\r\r".data(using: String.Encoding.utf8)!, withName: "") 

       } 
      } 
      else { } 
     } 
    },to:baseURL)