Alamofire - 多部分表单数据键值:
问题描述:
我正在尝试在服务器上进行视频上传。我正在使用Alamofire。我越来越接近解决方案,但...我有一个多部分数据表单方法,其中包括这样的参数“param1”:“test”,“param2”:[“1”,“2”],param3:{“考 “:” 123“}Alamofire - 多部分表单数据键值:
参数1仍处功能Alamofire.upload:
multipartFormData.appendBodyPart (date "test" .dataUsingEncoding (NSUTF8StringEncoding, allowLossyConversion: false) !, name: "param1")
如何添加参数2和参数3?
有我的方法:
Alamofire.upload(
.POST,
url,
headers: headers,
multipartFormData: { multipartFormData in
multipartFormData.appendBodyPart(data: "test".dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)!, name :"param1")
//it is only visualization what I want to do. I know that it isn't working.
//multipartFormData.appendBodyPart(data: ["1", "2"].dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)!, name :"param2")
//multipartFormData.appendBodyPart(data: {"test": "123 "}.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)!, name :"param3")
let fileURL = DataManager().getFileDirectionForFile("movie.mp4")
multipartFormData.appendBodyPart(fileURL: fileURL, name: "file")
},
encodingCompletion: { encodingResult in
switch encodingResult {
case .Success(let upload, _, _):
upload.responseString { response in
debugPrint(response)
}
case .Failure(let encodingError):
print(encodingError)
}
}
答
首先创建param dict传入请求。
let array = ["1","2"]
let dict = [
"test" : "123"
]
let params = [
"param1" : "test",
"param2" : array,
"param3" : dict
]
,然后传递PARAMS变量Alamofire.upload
Alamofire.upload(.POST, url, multipartFormData: { (multipartFormData) in
multipartFormData.appendBodyPart(data: params["param1"]!.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)!, name: "param1")
multipartFormData.appendBodyPart(data: params["param2"]!.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)!, name: "param2")
multipartFormData.appendBodyPart(data: params["param3"]!.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)!, name: "param3")
}) { (encodingResult) in
switch encodingResult {
case .Success(let upload, _, _):
upload.responseString { response in
debugPrint(response)
}
case .Failure(let encodingError):
print(encodingError)
}
}
答
这取决于您的API。我的API在相同的情况下可以处理这种格式:
multipartFormData.appendBodyPart(data: "1".dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)!, name :"param2[0]")
multipartFormData.appendBodyPart(data: "2".dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)!, name :"param2[1]")
multipartFormData.appendBodyPart(data: "123 ".dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)!, name :"param3[test]")
也许会为你工作。
谢谢。很容易解决:)。 – Dzeremix
你的欢迎:)如果你喜欢它,请接受应答@Dzeremix –
搞笑的是你祈祷这么多已经接受** **错误答案。是的,你的代码将被编译,但是由于'Array' /'NSArray'和'Dictionary' /'NSDictionary'不能响应选择器'dataUsingEncoding',所以会导致运行时崩溃。你的代码没有编译错误,因为你的字典中的“AnyObject”与Obj-C中的“id”相同,并且可以尝试调用任何Obj-C选择器,实际上是否存在。 –