uni-app uni.downloadFile下载文件报错 status=400 小文件正常下载

发布于 1周前 作者 sinazl 来自 Uni-App

uni-app uni.downloadFile下载文件报错 status=400 小文件正常下载

示例代码:

test(){
console.log('测试下载文件');
let that = this;
const downloadTask = uni.downloadFile({
// url: 'https://yxdj-res.oss-cn-shenzhen.aliyuncs.com/redaudio.mp3', //下载地址
url: 'https://yxdj-res.oss-cn-shenzhen.aliyuncs.com/msdj2024.apk',
success: (res) => {
console.log('success:'+JSON.stringify(res));
if (res.statusCode === 200) {
console.log('下载成功');
}
},
fail: (error) => {
console.log('error:'+JSON.stringify(error));
}
});  
downloadTask.onProgressUpdate((res) => {  
    console.log('下载进度' + res.progress);  
    console.log('已经下载的数据长度' + res.totalBytesWritten);  
    console.log('预期需要下载的数据总长度' + res.totalBytesExpectedToWrite);  

    // 满足测试条件,取消下载任务。  
    if (res.progress > 50) {  
        // downloadTask.abort();  
    }  
});  

操作步骤:

按上面代码跑在手机上就报错,但是换个小的文件能下载

预期结果:

正常下载

实际结果:

{"tempFilePath":"_doc/uniapp_temp_1724872260530/download/","statusCode":400,"errMsg":"downloadFile:ok"}

bug描述:

使用你们官方的案例 去下载文件,小文件可以下载下来70mb的安装包下不下来 报错提示:{“tempFilePath”:"_doc/uniapp_temp_1724862364754/download/",“statusCode”:400,“errMsg”:“downloadFile:ok”}

信息类别 信息内容
产品分类 uniapp/App
PC开发环境操作系统 Windows
PC开发环境操作系统版本号 win10
手机系统 Android
手机系统版本号 Android 12
手机厂商 华为
手机机型 mate40pro
页面类型 vue
vue版本 vue2
打包方式 云端
项目创建方式 HBuilderX

1 回复

在使用 uni-app 的 uni.downloadFile 方法下载文件时遇到 status=400 错误,通常意味着服务器返回了一个 HTTP 400 Bad Request 错误。这通常是由于请求本身有问题,比如参数错误、请求头不正确或者服务器无法解析请求。针对小文件可以正常下载而大文件出现问题的情况,我们可以考虑以下几个方向进行排查和解决。

首先,确保服务器能够处理大文件的请求。以下是一个基本的 uni.downloadFile 使用示例,同时我们会添加一些错误处理和日志记录来帮助诊断问题:

uni.downloadFile({
    url: 'https://example.com/largefile.zip', // 替换为实际文件URL
    success: (res) => {
        if (res.statusCode === 200) {
            console.log('下载成功', res.tempFilePath);
            // 这里可以进一步处理下载的文件,比如保存到本地或解压
        } else {
            console.error('下载失败,状态码:', res.statusCode);
        }
    },
    fail: (err) => {
        console.error('下载失败', err);
        // 尝试获取更多错误信息
        if (err.errMsg && err.errMsg.indexOf('fail:') === 0) {
            const errorCode = err.errMsg.split(':')[1];
            console.error('错误代码:', errorCode);
        }
    },
    complete: () => {
        console.log('下载完成(无论成功或失败)');
    },
    header: {
        'Content-Type': 'application/octet-stream', // 根据需要设置请求头
        'Authorization': 'Bearer YOUR_ACCESS_TOKEN' // 如果需要认证,添加认证头
    }
});

排查步骤:

  1. 检查URL:确保 URL 正确无误,并且服务器能够处理该 URL 的大文件请求。

  2. 服务器配置:检查服务器配置,确保没有对大文件下载做出限制,比如请求大小限制、超时设置等。

  3. 请求头:根据服务器的要求,确保所有必要的请求头都已正确设置。

  4. 文件大小:如果服务器对文件大小有限制,考虑分割文件下载或者与服务器管理员协商调整限制。

  5. 错误日志:查看服务器端的错误日志,可能会有更详细的错误信息帮助定位问题。

  6. 网络问题:确认网络环境稳定,大文件下载对网络稳定性要求较高。

通过上述代码和排查步骤,你应该能够更准确地定位问题所在,并采取相应的措施解决问题。如果问题依旧存在,可能需要进一步与服务器端的开发或维护人员沟通,查看是否有其他服务器端的问题导致该错误。

回到顶部