Alamofire - 多部分表单数据键:值
Posted
技术标签:
【中文标题】Alamofire - 多部分表单数据键:值【英文标题】:Alamofire - multipart form data key:value 【发布时间】:2016-07-29 10:37:14 【问题描述】:我正在尝试在服务器上上传视频。我正在使用 Alamofire。我越来越接近解决方案,但是......我有一个多部分数据表单方法,其中包括这样的参数 "param1":"test", "param2":["1", "2"], param3:"测试”:“123”
param1 仍然放置一个函数 Alamofire.upload:
multipartFormData.appendBodyPart (date "test" .dataUsingEncoding (NSUTF8StringEncoding, allowLossyConversion: false) !, name: "param1")
如何添加param2和param3?
有我的方法:
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)
【问题讨论】:
【参考方案1】:首先创建param dict以传入请求。
let array = ["1","2"]
let dict = [
"test" : "123"
]
let params = [
"param1" : "test",
"param2" : array,
"param3" : dict
]
然后将该参数变量传递给 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)
【讨论】:
欢迎您 :) 如果您喜欢它,请接受@Dzeremix 的答案 有趣的是,您如此祈祷以接受错误的答案。是的,您的代码将编译,但由于Array
/NSArray
和Dictionary
/NSDictionary
无法响应选择器dataUsingEncoding
,它将导致运行时崩溃。您的代码没有编译错误,因为您的字典中的 AnyObject
与 Obj-C 中的 id
相同,并且可以尝试调用任何 Obj-C 选择器,不管它是否存在。
如何添加认证?【参考方案2】:
这取决于您的 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]")
也许对你也有用。
【讨论】:
以上是关于Alamofire - 多部分表单数据键:值的主要内容,如果未能解决你的问题,请参考以下文章