Alamofire向服务器按参数传文件
网上很多资料都是只说怎么向服务器上传文件,而且版本也比较老,放到现在根本用不上了。有时不是单纯地传文件,是要带参数传一系列值,文件只是其中的一个。比如一个接口,需要你以键值对的形式上传3个值:key1-"aaa";key2-"bbb";key3-[图片]。其中前两个参数的值是字符类型的,第三个参数要求你传一个图片,那使用Alamofire要怎么操作呢?直接上代码:
Alamofire.upload(
multipartFormData: { multipartFormData in
for key in parmameters.keys{
if key != "file"{
multipartFormData.append((parmameters[key] as! String).data(using: String.Encoding.utf8)!, withName: key)
}else{
multipartFormData.append(parmameters[key] as! URL, withName: key, fileName: "passport.jpg", mimeType: "image")
}
}
},
to: url,
encodingCompletion: { encodingResult in
switch encodingResult {
case .success(let upload, _, _):
upload.responseString { response in
let str = response.result.value!
let entity=PassportEntity(JSONString: str)
if entity != nil{
finishedCallback(entity!)
}else{
finishedCallback("failure" as AnyObject)
}
}
case .failure(let encodingError):
finishedCallback("failure" as AnyObject)
}
}
)
其中,“PassportEntity”是我的一个自定义类,你们根据自己需要写。
关键是在这个参数:
multipartFormData: { multipartFormData in
for key in parmameters.keys{
if key != "file"{
multipartFormData.append((parmameters[key] as! String).data(using: String.Encoding.utf8)!, withName: key)
}else{
multipartFormData.append(parmameters[key] as! URL, withName: key, fileName: "passport.jpg", mimeType: "image")
}
}
}
以表单的方式,加上键值对的形式上传参数,withName对应的值就是你的key,append()方法的第一个参数就是该key对应的值,“parmameters”是我传入的键值对的字典([String:Any]类型),我上传图片采用的是:
multipartFormData.append(parmameters[key] as! URL, withName: key, fileName: "passport.jpg", mimeType: "image")
传入文件路径即可,注意要在mimeType这个地方指定文件类型。