Alamofire向服務(wù)器按參數(shù)傳文件
網(wǎng)上很多資料都是只說怎么向服務(wù)器上傳文件妥泉,而且版本也比較老吸奴,放到現(xiàn)在根本用不上了。有時不是單純地傳文件愧怜,是要帶參數(shù)傳一系列值呀页,文件只是其中的一個。比如一個接口叫搁,需要你以鍵值對的形式上傳3個值:key1-"aaa";key2-"bbb";key3-[圖片]赔桌。其中前兩個參數(shù)的值是字符類型的,第三個參數(shù)要求你傳一個圖片渴逻,那使用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”是我的一個自定義類惨奕,你們根據(jù)自己需要寫雪位。
關(guān)鍵是在這個參數(shù):
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")
}
}
}
以表單的方式,加上鍵值對的形式上傳參數(shù)梨撞,withName對應(yīng)的值就是你的key雹洗,append()方法的第一個參數(shù)就是該key對應(yīng)的值,“parmameters”是我傳入的鍵值對的字典([String:Any]類型),我上傳圖片采用的是:
multipartFormData.append(parmameters[key] as! URL, withName: key, fileName: "passport.jpg", mimeType: "image")
傳入文件路徑即可卧波,注意要在mimeType這個地方指定文件類型时肿。