2016-07-29 4 views
2

Я пытаюсь сделать загрузку видео на сервер. Я использую Alamofire. Я приближаюсь к решению, но ... У меня есть метод множественной формы данных, который включает такие параметры «param1»: «test», «param2»: ["1", "2"], param3: {" тест ":" 123 «}Alamofire - ключ данных с несколькими ключами: значение

param1 еще поместить функцию Alamofire.upload:

multipartFormData.appendBodyPart (date "test" .dataUsingEncoding (NSUTF8StringEncoding, allowLossyConversion: false) !, name: "param1") 

Как добавить param2 и Param3?

Существует мой метод:

Alamofire.upload(
       .POST, 
       url, 
       headers: headers, 
       multipartFormData: { multipartFormData in 

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

//it is only visualization what I want to do. I know that it isn't working. 
        //multipartFormData.appendBodyPart(data: ["1", "2"].dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)!, name :"param2") 
        //multipartFormData.appendBodyPart(data: {"test": "123 "}.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)!, name :"param3") 

        let fileURL = DataManager().getFileDirectionForFile("movie.mp4") 
        multipartFormData.appendBodyPart(fileURL: fileURL, name: "file") 
       }, 
       encodingCompletion: { encodingResult in 
        switch encodingResult { 

        case .Success(let upload, _, _): 
         upload.responseString { response in 
          debugPrint(response) 
         } 

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

ответ

5

Сначала создайте param dict для передачи по запросу.

let array = ["1","2"] 
let dict = [ 
    "test" : "123" 
] 

let params = [ 
    "param1" : "test", 
    "param2" : array, 
    "param3" : dict 
] 

, а затем передать, что Params переменная Alamofire.upload

Alamofire.upload(.POST, url, multipartFormData: { (multipartFormData) in 
     multipartFormData.appendBodyPart(data: params["param1"]!.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)!, name: "param1") 
     multipartFormData.appendBodyPart(data: params["param2"]!.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)!, name: "param2") 
     multipartFormData.appendBodyPart(data: params["param3"]!.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)!, name: "param3") 
     }) { (encodingResult) in 
      switch encodingResult { 

      case .Success(let upload, _, _): 
       upload.responseString { response in 
        debugPrint(response) 
       } 

      case .Failure(let encodingError): 
       print(encodingError) 
      } 
    } 
+0

Спасибо. Так легко решить :). – Dzeremix

+1

Ваше приветствие :) Если вам это нравится Пожалуйста, примите ответ @Dzeremix –

+0

Забавный, что вы так молитесь, чтобы принять ** неправильный ** ответ. Да, ваш код будет компилироваться, но он будет иметь сбой во время выполнения из-за 'Array' /' NSArray' и 'Dictionary' /' NSDictionary', которые не могут ответить на селектор 'dataUsingEncoding'. У вашего кода нет ошибок компиляции, потому что 'AnyObject' из вашего словаря такой же, как' id' в Obj-C, и может попытаться вызвать любой селектор Obj-C, существует он на самом деле или нет. –

0

Это зависит от вашего API. Мой API в такой же ситуации может обрабатывать этот формат:

multipartFormData.appendBodyPart(data: "1".dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)!, name :"param2[0]") 
multipartFormData.appendBodyPart(data: "2".dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)!, name :"param2[1]") 
multipartFormData.appendBodyPart(data: "123 ".dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)!, name :"param3[test]") 

Возможно, это сработает и для вас.

Смежные вопросы