uni-app 下载文件无法监听进度

uni-app 下载文件无法监听进度

原因:
阿帕奇故障。

11 回复

这个问题很明确:

使用同样的的Hello 5+ 代码测试。

同样的wgt文件,不同的服务器地址:

我们的测试地址 : http://47.104.xxx.xxx:13888/examples/android.wgt 有下载进度
你的测试地址: https://xxxx.com/public/ccc/android.wgt 无下载进度
如你所说 你的api 没有返回 content-length字段。 无法知道待下载资源的总大小,自然无法知道资源的下载进度。
你需要调整一下你的apache服务器配置
var url = “http://47.104.xxx.xxx:13888/examples/android.wgt”;
// var url = “https://xxx.com/public/ccc/android.wgt”;
var options = {timeout: 2,
retry: 0,
retryInterval: 0 };
dtask = plus.downloader.createDownload( url, options );
dtask.addEventListener( “statechanged”, function(task,status){
if(!dtask){return;}
console.log(task.state);
switch(task.state) {
case 1: // 开始
outLine( “开始下载…” );
break;
case 2: // 已连接到服务器
outLine( “链接到服务器…” );
break;
case 3: // 已接收到数据
outSet( “下载数据更新:” );
outLine( task.downloadedSize+"/"+task.totalSize );
break;
case 4: // 下载完成
outSet( “下载完成!” );
outLine( task.totalSize );
break;
}
} );
outSet( “创建下载任务成功!” );

更多关于uni-app 下载文件无法监听进度的实战教程也可以访问 https://www.itying.com/category-93-b0.html


回复 有问: 服务器当然会有配置文件来配置 不同类型的文件策略。 你可以试试把wgt的后缀名改成mp4试试。 至于更多的 服务器配置细节。建议你系统的学习一下。

回复 有问: 好的,已修改

我知道了,是阿帕奇的问题。但是并没有发现是什么原因。本地把gzip压缩模块开启又关闭了一下,重启后突然就可以了。服务器上还是不行。有空我重装下再看吧。 另外就是下载监听的进度有点慢的太多了,希望再调快一些。或者不要让它下载完就安装,应该在状态3里判断是否下载到100%进度再安装。目前我在状态3里判断下载进度>=100再进行安装也不行,只要它下载完就会自动安装了。

你给个示例代码。 我试试

function createDownloadTask(){
if ( dtask ) {
outLine( “下载任务已创建!” );
return;
}
var url = “http://47.104.xxx.xxx:13888/examples/jita.mp4”;
var options = {timeout: 2,
retry: 0,
retryInterval: 0 };
dtask = plus.downloader.createDownload( url, options );
dtask.addEventListener( “statechanged”, function(task,status){
if(!dtask){return;}
console.log(task.state);
switch(task.state) {
case 1: // 开始
outLine( “开始下载…” );
break;
case 2: // 已连接到服务器
outLine( “链接到服务器…” );
break;
case 3: // 已接收到数据
outSet( “下载数据更新:” );
outLine( task.downloadedSize+"/"+task.totalSize );
break;
case 4: // 下载完成
outSet( “下载完成!” );
outLine( task.totalSize );
break;
}
} );
outSet( “创建下载任务成功!” );
} 你用Hello 5+测试一下

回复 有问: 你发一下你的 wgt下载地址给我。 私发我也可以。

回复 DCloud_Android_DQQ: 已私信你啦

downloadImage: function () {

            var url = "http://47.104.xxx.xxx:13888/examples/jita.mp4";  
            var options = {timeout: 2,    
                                retry: 0,    
                                retryInterval: 0  };  
            var dtask = plus.downloader.createDownload( url, options );  
            dtask.addEventListener( "statechanged", function(task,status){  
                if(!dtask){return;}  
                console.log(task.state);  
                switch(task.state) {  
                    case 1: // 开始  
                        console.log( "开始下载..." );  
                    break;  
                    case 2: // 已连接到服务器  
                        console.log( "链接到服务器..." );  
                    break;  
                    case 3: // 已接收到数据  
                        console.log( "下载数据更新:" );  
                        console.log( task.downloadedSize+"/"+task.totalSize );  
                    break;  
                    case 4: // 下载完成  
                        console.log( "下载完成!" );  
                        console.log( task.totalSize );  
                    break;  
                }  
            });  

            dtask.start();  
    }  

uni-app 用这个代码试试
我用hx 3.0.7 未复现问题

我又分别测试了未加密JS打包wgt,也是不能获取文件总大小。 HBX版本: 3.0.7.20210109-alpha

针对uni-app下载文件无法监听进度的问题,这里给出解决方案:

  1. 使用uni.downloadFile API时,确实存在进度监听问题,这是uni-app的已知限制

  2. 替代方案:

  • 使用plus.downloader.createDownload方法
  • 示例代码:
let downloadTask = plus.downloader.createDownload(url, {
    filename: '_downloads/' + fileName
}, (d, status) => {
    if(status === 200) {
        console.log('下载完成');
    }
});
downloadTask.addEventListener('statechanged', (task, status) => {
    if(task.state === 4) {
        console.log('下载进度:' + task.downloadedSize/task.totalSize*100 + '%');
    }
});
downloadTask.start();
回到顶部