簡體   English   中英

我應該如何在 iOS 中通過 multipart/form-data 發送字典?

[英]How should I send a dictionary by multipart/form-data in iOS?

我有以下復雜的字典:

    {
      "platform" : "ios",
      "data" : {
        "films" : [0],
        "about" : "",
        "is_voluntary" : true,
        "items" : [{
          "idx" : 0,
          "dates" : [
            "2020-09-23"
          ],
        "timelines" : [
          "11:00"
        ]
      }
    ],
    "language" : "en"
  },
  "app_version" : "2.1.0"
}

我的服務器端要求我使用multipart/form-data發送上述multipart/form-data 我幾乎不理解這種格式,但這是我使用 Alamofire 的嘗試:

 var initParams: [String: Any] = ....
 for (key, param) in initParams {
        if let array = param as? [String] {
            for item in array {
                if let data = item.data(using: .utf8) {
                    multipartData.append(data, withName: key)
                }
            }
        } else {
            if let data = "\(param)".data(using: .utf8) {
                multipartData.append(data, withName: key)
            }
        }
    }

multipartData是來自Alamofire.upload()函數的 Alamofire 對象。 但是,無論如何,以上不起作用。 我的服務器端告訴我的方案中沒有data 我哪里錯了? 如何正確轉換任何對象以准備form-data 注意: JSONSerialization.data函數也不起作用。

它類似於下面的代碼示例,我沒有看到完整的字典,所以您可以查看示例並進行操作,

{
   "data": {
      "is_voluntary": true
   }
   "app_version": "1.2.3"
}

SWIFT代碼:

static func YourMethodName(app_version: String, , completion:@escaping (Bool)->Void) {
  var headers: HTTPHeaders!
  headers = [
        "Content-type": "application/x-www-form-urlencoded",
        "Authorization": "Your token",
        "Accept": "application/json"
             ]
  let url = "Your URL"
                
   AF.upload(multipartFormData: { (multiPart) in
        
   multiPart.append(Data("\(app_version)".utf8), withName: "app_version")
   multiPart.append(Data("\(true)".utf8), withName: "data[is_voluntary]")
        
  }, usingThreshold: UInt64.init(), to: url, method: .post, headers: headers).responseDecodable { (response:`enter code here` DataResponse<UserResponse>) in
   switch response.result {
          case .success(let userResponse):
                 // success data
          case .failure(_):
                 // failure data
          }
                    
   completion(response.response?.statusCode == 200)
  }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM