[英]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.