uni-app 下载文件无法监听进度
uni-app 下载文件无法监听进度
原因:
阿帕奇故障。
这个问题很明确:
使用同样的的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下载文件无法监听进度的问题,这里给出解决方案:
-
使用uni.downloadFile API时,确实存在进度监听问题,这是uni-app的已知限制
-
替代方案:
- 使用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();