2017-04-25 39 views
3

我tryna與參數一起發送照片,但問題是我想發送一個JSON數組到服務器。看來Alamofire沒有發送Data列表的方法,那麼另一個好的替代方案是什麼?Alamofire:如何在多部分表單數據中追加json數組參數?

問題的關鍵部分是:

var encodedTags: [Data] = tags.map({ return $0.data(using: .utf8)!}) 
      mpd.append(encodedTags, withName: key) 

此上傳調用內:

let parameters: [String: Any] = ["username": "TheCooliest", ..., "tags": ["KoolKid", "TheKooliest", "BetterThanKimK"]  
... 

upload(multipartFormData: { (mpd) in 
     mpd.append(url, withName: "file", fileName: "weeknd.jpg") 
     for (key, value) in parameters { 
      if let tags = value as? [String], key == "tags" { 
       var encodedTags = tags.map({ return $0.data(using: .utf8)!}) 
       mpd.append(encodedTags, withName: key) 

      } 
     } 
    } 

回答

0

您可以如下操作:

Alamofire.upload(multipartFormData: { (multipartFormData) in 
     multipartFormData.append(imageData, withName: "xyz", fileName: "file.jpeg", mimeType: "image/jpeg") // append data what you want 
}, to: url) 
{ (result) in 
     //result 
} 
+0

很抱歉,如果這個問題似乎是模糊的,但我想用'「標籤」發送參數:[**的標籤列表**]',但我不能找到另一種方式來實現這一目標。如果你明白我的意思,'append'方法只接受'Data',而不接受'[Data]'。 –

0

我有同樣的情況,你必須將你的數組轉換爲字符串然後進行編碼和上傳。 在我的情況下,我不得不加密數組併發送到服務器,然後服務器解密陣列。

var encodedTags = tags.map({ return $0}) 
//write logic to convert array to string 
mpd.append(encodedTags.data(using: .utf8)!, withName: key) 
0

這是多部分請求的答案,請查看代碼。

Alamofire.upload(multipartFormData:{ multipartFormData in 
     let firstNameTxt = self.firstNmae.text!.data(using: .utf8) 
     multipartFormData.append(firstNameTxt!, withName: "first_name", mimeType: "text/plain") 
    }, 
        usingThreshold:UInt64.init(), to:AppConstant.GlobalConstants.updateProfile, method:.post, headers:["Authorization": "auth_token"],encodingCompletion: { encodingResult in 
         switch encodingResult { 
         case .success(let upload, _, _): 
          upload.responseJSON { response in 
           debugPrint(response) 
          } 
         case .failure(let encodingError): 
          print(encodingError) 
         } 
    }) 
0

好了,所以我用JSONSerialization。它將我的列表轉換爲一個Any對象,我將其轉換爲數據。

for (key, value) in parameters { 
    if let tags = value as? [String], key == "tags" { 

     do { 
      let json = try JSONSerialization.data(withJSONObject: tags, options: .prettyPrinted) 
      mpd.append(json as Data, withName: key) 
     } catch {} 

    }