2016-07-29 135 views
2

我正在嘗試在服務器上進行視頻上傳。我正在使用Alamofire。我越來越接近解決方案,但...我有一個多部分數據表單方法,其中包括這樣的參數「param1」:「test」,「param2」:[「1」,「2」],param3:{「考 「:」 123「}Alamofire - 多部分表單數據鍵值:

參數1仍處功能Alamofire.upload:

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

如何添加參數2和參數3?

有我的方法:

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」與Obj-C中的「id」相同,並且可以嘗試調用任何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]") 

也許會爲你工作。

相關問題