You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 08:42:00