uni-app的 uni.downloadFile 在下载文件时突然中断会造成 success、fail、complete 不触发

uni-app的 uni.downloadFile 在下载文件时突然中断会造成 success、fail、complete 不触发

项目 信息
产品分类 uniapp/App
PC开发环境操作系统 Windows
PC开发环境操作系统版本号 11
HBuilderX类型 正式
HBuilderX版本号 4.45
手机系统 Android
手机系统版本号 Android 9.0
手机厂商 模拟器
手机机型 雷电模拟器
页面类型 vue
vue版本 vue3
打包方式 云端
项目创建方式 HBuilderX

示例代码:

onLoad(() => {  
    console.log("开始下载了");  
    let task = uni.downloadFile({  
        url: "",  
        success: (res) => {  
            console.log('downloadFile success, res is', res)  
        },  
        fail: (err) => {  
            console.log('downloadFile fail, err is:', err)  
        },  
        complete: (res) => {  
            console.log('downloadFile complete, res is:', res)  
        }  
    })  
    task.onProgressUpdate((res) => {  
        if (res.progress > 10) {  
            task.abort()  
        }  
    })  
})

操作步骤:

onLoad(() => {  
    console.log("开始下载了");  
    let task = uni.downloadFile({  
        url: "",  
        success: (res) => {  
            console.log('downloadFile success, res is', res)  
        },  
        fail: (err) => {  
            console.log('downloadFile fail, err is:', err)  
        },  
        complete: (res) => {  
            console.log('downloadFile complete, res is:', res)  
        }  
    })  
    task.onProgressUpdate((res) => {  
        if (res.progress > 10) {  
            task.abort()  
        }  
    })  
})

预期结果:

中途打断应该有回调的

实际结果:

没有回调

bug描述:

uniappx 的 uni.downloadFile 在下载文件时突然中断会造成 success、fail、complete 不触发


更多关于uni-app的 uni.downloadFile 在下载文件时突然中断会造成 success、fail、complete 不触发的实战教程也可以访问 https://www.itying.com/category-93-b0.html

1 回复

更多关于uni-app的 uni.downloadFile 在下载文件时突然中断会造成 success、fail、complete 不触发的实战教程也可以访问 https://www.itying.com/category-93-b0.html


这是一个已知的uni.downloadFile在中断时回调不触发的问题。在当前的实现中,当调用task.abort()方法主动中断下载时,确实不会触发success/fail/complete回调函数。

针对这个问题的临时解决方案是:

  1. 在调用abort()后手动处理中断逻辑
  2. 使用try-catch包裹可能中断的操作
  3. 通过onProgressUpdate回调自行判断下载状态

示例修改代码:

let isAborted = false;
task.onProgressUpdate((res) => {
    if (res.progress > 10 && !isAborted) {
        isAborted = true;
        task.abort();
        console.log('下载已手动中断');
        // 这里执行中断后的处理逻辑
    }
});
回到顶部