2017-04-25 20 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を使用。私のリストをDataに変換する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 {} 

    } 
関連する問題