用最新的 Alamofire(swift 4.1) (带参数)post方法上传图片到服务器
用最新的 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部分代码
官方解释如下
后端代码