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

Alamofire uploadProgress回调未触发问题求助

上传进度回调未触发的解决方案

问题根源

你当前的实现是先将文件内容一次性读取到Data对象中,再添加到多部分表单数据里。这种情况下,Alamofire会直接把内存中的完整数据一次性发送给服务器,无法跟踪分块上传的进度,因此uploadProgress回调永远不会被触发。

修复方案

不要提前读取文件内容,直接将文件URL添加到多部分表单中,让Alamofire负责逐块读取并上传文件,这样就能正常触发进度回调。同时要注意安全作用域资源的释放时机,必须在表单数据构造完成后再停止访问。

修改后的代码如下:

do {
    let _ = fileUrl.startAccessingSecurityScopedResource()
    
    let pendingRequest = session.upload(
        multipartFormData: { multipartFormData in
            // 直接添加文件URL,而非预读取的Data
            try multipartFormData.append(fileUrl, withName: "file", fileName: fileUrl.lastPathComponent, mimeType: fileUrl.pathExtension)
            multipartFormData.append(typeOfDocument.data(using: .utf8)!, withName: "fileType")
            multipartFormData.append(customerId.data(using: .utf8)!, withName: "customerId")
            multipartFormData.append(fileId.data(using: .utf8)!, withName: "fileId")
            // 构造完成后停止访问安全作用域资源
            fileUrl.stopAccessingSecurityScopedResource()
        },
        to: url,
        method: .post,
        headers: headers
    ).uploadProgress(closure: { progress in
        print(progress.fractionCompleted)
    }).responseString { response in
        guard let data = response.data, let decodedModel = try? JSONDecoder().decode(UploadDocumentsResponse.self, from: data) else {
            completionHandler(.failure(.cannotDecode))
            return
        }
        completionHandler(.success(decodedModel))
    }
    return CancellableRequest(pendingRequest: pendingRequest)
} catch let error {
    fileUrl.stopAccessingSecurityScopedResource()
    print(error)
    return nil
}

额外验证点

  1. 确保服务器端支持分块上传的进度反馈(你的上传功能正常,这一点大概率没问题)
  2. 若仍有问题,可指定主队列执行进度回调,方便更新UI:
.uploadProgress(queue: .main) { progress in
    print(progress.fractionCompleted)
    // 这里可以直接更新UI进度条
}

内容的提问来源于stack exchange,提问作者Abdurakhmon

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 18:52:28