用最新的 Alamofire(swift 4.1) (帶引數)上傳圖片到伺服器
1,準備引數
let image = UIImage(named: "xxx")
//將圖片轉化為JPEG型別的data 後面的引數是壓縮比例
let jpegImage = UIImageJPEGRepresentation(image!, 0.5)
//要傳的引數(比如我們帶使用者的加密uid)
let uid = ["uid" : user.uid]
let ecodeUid = EncryptionHelper.getParamsString(uid as [String : AnyObject])
//將參賽轉化為data
let ecodeData = ecodeUid.data(using: .utf8)
2,開始上傳
//全部程式碼如下
Alamofire.upload(multipartFormData: { (multipartFormData) in
multipartFormData.append(ecodeData!, withName: "data")
multipartFormData.append(jpegImage!, withName: "avatar", fileName: "avatar"+".jpeg", mimeType: "image/jpeg")
}, to: "https://www.ka5188.com/app/api/v1/user/uploadImg" , encodingCompletion: { encodingResult in
ws!.hideLoading()
switch encodingResult {
case .success(let upload, _, _):
upload.responseJSON { response in
if let data = response.data {
let responseJson = JSON(data: data)
if responseJson["status"].intValue == 1 {
//上傳成功,重新整理當前頭像
}
} else {
let msg = responseJson["msg"].stringValue
self.showMessage(msg)
}
}
}
case .failure(let encodingError):
log.debug(encodingError)
self.showMessage("上傳圖片失敗")
}
})
說明和注意點
//需要注意的地方
multipartFormData.append(ecodeData!, withName: "data")
//第一個引數"ecodeData",就是我們加密的二進位制uid
/第二個引數"data"
服務端以這個欄位名獲取加密的uid(個人以為應該用"uid")
multipartFormData.append(jpegImage!, withName: "avatar", fileName: "avatar"+".jpeg", mimeType: "image/jpeg")
//帶一個引數"jpegImage",就是我們加密的二進位制圖片流
//帶二個引數"withName",後臺通過西欄位來獲取圖片
//帶三個引數"fileName",後臺檢圖片型別的,主要是字尾名
//帶四個引數"mimeType",傳輸的檔案型別。
注 : 1,開始由於第二個引數和第三個引數弄混了,導制上傳失敗
2,由於第三個引數沒有加字尾".jpeg",導致後臺輸出(檔案格式不支援)
3,第三個引數mimeType 傳入型別是圖片
下面給出官方解釋,還有我們後臺php部分程式碼
官方解釋如下
後端程式碼