uniapp文件下载进度条 plus.downloader.createDownload

/**

  • {url} 下载地址
  • {name} 保存文件时 重命名
  • {cb1,cb2} 下载进度和完成 的回调
  • :下载大文件“可能”会内存溢出
  • */

export default (url,name,cb1,cb2) => {
let progressVal = 0;
var dtask = plus.downloader.createDownload(url,{
filename:“_downloads/”+name //利用保存路径,实现下载文件的重命名
},function(d,status){
//d为下载的文件对象
if(status==200){
console.log(“下载成功”,d)
//下载成功,d.filename是文件在保存在本地的相对路径,使用下面的API可转为平台绝对路径
var fileSaveUrl = plus.io.convertLocalFileSystemURL(d.filename);
plus.runtime.openFile(d.filename); //选择软件打开文件
}else{
//下载失败
console.log(“下载失败”,d)
plus.downloader.clear(); //清除下载任务
}
})
dtask.addEventListener(‘statechanged’, (task) => {
if (!dtask) {
return;
}

		// no default
		
		switch (task.state) {
			
			case 1:

				console.log('开始下载');

				break;

			case 2:

				console.log('链接到服务器...');

				break;

			case 3:
				
				progressVal = (changeTwoDecimal_f(task.downloadedSize / task.totalSize) * 100) + "%";
				
				if(cb1) cb1(progressVal)
				break;

			case 4:
			
				console.log('监听下载完成');
				if(cb2) cb2()
				break;

		}

	});

	dtask.start(); 

}

/**

  • 例如
  • 2 → 2.00
  • 2.3 → 2.30
  • 2.321 → 2.32
  • 2.328 → 2.33
  • /
    function changeTwoDecimal_f(x)
    {
      var f_x = parseFloat(x);
      if (isNaN(f_x))
      {
        return 0;
      }
      var f_x = Math.round(x
    100)/100;
      var s_x = f_x.toString();
      var pos_decimal = s_x.indexOf(‘.’);
      if (pos_decimal < 0)
      {
        pos_decimal = s_x.length;
      s_x += ‘.’;
      }
      while (s_x.length <= pos_decimal + 2)
      {
        s_x += ‘0’;
      }
      return s_x;
    }
UniApp 中的 `uni.download` 或 `plus.downloader.createDownload` 是用于下载文件的功能,但它不是像浏览器原生下载那样自动处理失败后的恢复下载。如果下载过程中发生错误导致下载失败,通常不会自动重新尝试下载。 如果你需要实现这样的功能,你需要自己管理下载状态并处理错误。以下是一个简化的示例: ```javascript let downloadTask = plus.downloader.createDownload({ url: 'http://example.com/file.zip', // 替换为你实际的下载地址 savePath: '/sdcard/download', // 存储路径 progressCallback: function (progress) { console.log('下载进度:', progress); }, completeCallback: function (result) { if (result.status === plus.downloader.STATUS_SUCCESS) { console.log('下载成功'); } else { console.error('下载失败:', result.message); // 如果你想在这里恢复下载,可以设置定时器重新尝试,但请注意控制循环次数以避免无限循环 setTimeout(() => { // 检查网络连接等条件再尝试下载 // 下载失败恢复的代码 }, 5 * 1000); // 假设每5秒尝试一次 } }, errorCallback: function (error) { console.error('下载错误:', error); // 直接在这里记录错误,然后考虑是否需要恢复下载 }, }); downloadTask.start(); ``` 注意,这只是一个基本的示例,并非完整的错误恢复机制。实际应用中,可能需要更复杂的逻辑来判断是否真的需要恢复下载,比如检查网络状况、用户操作反馈等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值