用最新的 Alamofire(swift 4.1) (带参数)post方法上传图片到服务器

1次阅读

共计 1471 个字符,预计需要花费 4 分钟才能阅读完成。

用最新的 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 部分代码

官方解释如下

后端代码

正文完
 0