Swift中如何使用Alamofire 5检测上传进度与上传完成后的状态?
你可以直接通过Alamofire自带的uploadProgress链式方法监听上传进度,改造后的实现代码如下:
AF.upload(multipartFormData: { multipartFormData in multipartFormData.append(Data("one".utf8), withName: "one") multipartFormData.append(Data("two".utf8), withName: "two") }, to: "https://httpbin.org/post") // 实时监听上传进度 .uploadProgress { progress in // progress.fractionCompleted 为0~1区间的完成比例,可直接用来更新UI进度条 print("当前上传进度:\(String(format: "%.1f", progress.fractionCompleted * 100))%") // 也可以自行获取已上传字节、总字节做自定义计算 print("已上传:\(progress.completedUnitCount) 字节,总大小:\(progress.totalUnitCount) 字节") } .responseDecodable(of: HTTPBinResponse.self) { response in switch response.result { case .success(let resData): // 上传成功逻辑,可直接使用解析后的返回数据resData debugPrint("上传成功", resData) case .failure(let error): // 上传失败逻辑,可读取error信息做用户提示 print("上传失败:\(error.localizedDescription)") } }
补充注意点:
uploadProgress闭包默认在主队列执行,如果你不需要在闭包内更新UI,可以手动指定后台队列降低性能消耗:.uploadProgress(queue: DispatchQueue.global(qos: .background), closure: { progress in ... })- 如果不需要对返回结果做模型解析,可以把
responseDecodable替换为response、responseJSON等方法,成功失败的判断逻辑保持一致即可 - 大文件上传建议搭配Alamofire的后台上传配置使用,避免App退到后台后任务被中断
内容的提问来源于stack exchange,提问作者Nawin Poolsawad
相关产品推荐
相关产品推荐

