Ios Alamofire:如何在多部分表单数据中附加json数组参数?
我正在tryna发送一张带有参数的照片,但问题是我想向服务器发送一个JSON数组。Alamofire似乎没有发送Ios Alamofire:如何在多部分表单数据中附加json数组参数?,ios,alamofire,multipartform-data,Ios,Alamofire,Multipartform Data,我正在tryna发送一张带有参数的照片,但问题是我想向服务器发送一个JSON数组。Alamofire似乎没有发送数据列表的方法,那么还有什么好的替代方法呢 问题的关键在于: var encodedTags: [Data] = tags.map({ return $0.data(using: .utf8)!}) mpd.append(encodedTags, withName: key) 在此上传呼叫中: let parameters: [String: Any] = [
数据列表的方法,那么还有什么好的替代方法呢
问题的关键在于:
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)
}
}
}
我也遇到过同样的情况,你必须将数组转换成字符串,然后编码并上传。
在我的例子中,我必须加密数组并发送到服务器,然后服务器解密数组
var encodedTags = tags.map({ return $0})
//write logic to convert array to string
mpd.append(encodedTags.data(using: .utf8)!, withName: key)
这是多部分请求的答案,请查看代码。
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)
}
})
好的,所以我使用了JSONSerialization
。它将我的列表转换为我转换为数据的任何对象
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 {}
}
如果您想使用Swift 4实现这一点,可以使用新的JSONECODER。
您可以这样做,使用多部分表单数据上载文件和JSON参数:
let image = UIImage(named: "test")
let png = UIImagePNGRepresentation(image!)!
let arr = ["str1", "str2"]
let jsonArr = try? JSONEncoder().encode(arr)
Alamofire.upload(multipartFormData: { (multiPart) in
multiPart.append(png, withName: "file", fileName: "aaa.png", mimeType: "image/png")
if let jsonArr = jsonArr {
multiPart.append(jsonArr, withName: "pictures")
}
}, to: URL) { (result) in
}