2016-04-04 2 views
1

Я работаю над отправкой нескольких изображений на бэкэнд с использованием Alamofire. У меня есть base64 строки изображений, добавленных в NSMutableArray. Теперь Я пытаюсь отправить этот массив строк на сервер, но его не работает.Загрузить массив, имеющий base64String, закодированное несколько изображений с использованием Alamofire

Я попытался загрузить одно изображение на этом пути, и она работает супер круто, но почему бы не массив изображений.

Комплектование Изображение -

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) 


    } 

Выгрузка

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) 


     } 
    } 

    } 

Так как решить эту проблему? Пожалуйста, предложите модификации кода или другие средства.

+0

Вы уверены, что конечная точка, которую вы вызываете, поддерживает одновременное отправку нескольких изображений? Если это так, я бы предположил, что это потребует от них отправки как MultipartFormData. – cnoon

ответ

2

использовать следующий код Загрузка изображения на сервер

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

} 

Для нескольких изображений

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

Вы можете отправлять параметры путем добавления в массив multipartFromData –

+0

Как вы можете упомянуть любой код для загрузки нескольких изображений. –

+0

Должен ли я писать какое-либо специальное кодирование на внутренней стороне. –

0

Вот еще один вариант, как я столкнулся с проблемой в стороне сервера для чтения нескольких изображений:

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) 
Смежные вопросы