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

#

官方解释如下

image

后端代码

image

附:一个优雅的图片处理库
欢迎查看DDGScreenShot

其余功能如下

  1. (一)DDGScreenShot — 复杂屏幕截屏(如view ScrollView webView wkwebView)
  2. (二)DDGScreenShot–iOS 图片处理–多图片拼接
  3. (三)DDGScreenShot–iOS 图片裁剪,切圆角,加边框,你还用cornerRadius,还有更高级的用法
  4. (四)DDGScreenShot—图片擦除功能
  5. (六)DDGScreenShot —图片加各种滤镜高逼格操作
  6. (七)DDGScreenShot —图片加高斯模糊,老电影效果
阅读更多

没有更多推荐了,返回首页