首先看官方给的下载方法:
// 以下载应用为例
// 使用uni.downloadFile()函数进行下载,然后用ni.saveFile()方法保存到本地
const downloadTask = uni.downloadFile({
url: "下载地址.apk",
success: (res) => {
if (res.statusCode === 200) {
// 保存文件到本地
uni.saveFile({
tempFilePath: res.tempFilePath,
success: (save) => {
console.log("下载成功");
console.log("应用保存的地址:" + save.savedFilePath); // _doc/uniapp_save/应用名.apk
}
})
}
}
})
// 监控下载进度
downloadTask.onProgressUpdate((res) => {
console.log('下载进度' + res.progress);
console.log('已下载大小' + res.totalBytesWritten);
console.log('文件总大小' + res.totalBytesExpectedToWrite);
});
官方提供的函数很简单好用,但是有一点不好,就是没法自定义文件下载后保存的路径,默认保存路径为,自己拼接完整路径就是file://storage/emulated/0/Android/data/你的app包名/apps/HBuilder/doc/uniapp_save/应用名.apk
藏得太深,用户不宜使用,且因为有的业务需要,所以就需要自定义保存的文件夹。
使用plus.downloader方法写一个方法,官方给的函数也是使用的plus.downloader方法打包
// 这里使用filename进行最定义路径
var url = "下载地址.apk";
var dtask = this.dtask = plus.downloader.createDownload(url, {
filename: "file://storage/emulated/0/自定义路径/应用名.apk"
}, (d, status) => {
if (status != 200) {
// 下载失败,清除下载任务
plus.downloader.clear();
}
});
// 定义监听方法监听下载状态
dtask.addEventListener(
"statechanged",
(dl, status)=> {
console.log("文件总大小:" + dl.totalSize);
console.log("已下载大小:" + dl.downloadedSize);
console.log("下载进度:" + Math.floor(dl.downloadedSize / dl.totalSize * 100));
}, false);
// 开始执行下载任务
dtask.start();
以上就是unaipp如何下载文件到自定义文件夹
配套的其他几个方法
// 取消下载,清除下载任务
cancelDown() {
this.dtask.abort();
plus.downloader.clear();
},
// 暂停下载
pauseDown() {
this.dtask.pause();
},
// 恢复下载
resumeDown() {
this.dtask.resume();
},
// 安装软件,注意这里的filename需要完整,即file://storage/emulated/0/自定义路径/应用名.apk,使用plus.io.convertLocalFileSystemURL()方法转为平台绝对路径进行安装。
installApK () {
let fileSaveUrl = plus.io.convertLocalFileSystemURL(this.dtask.filename);
plus.runtime.install(fileSaveUrl, {},()=>{}, (err)=>{
uni.showToast({
title: err,
icon: "none"
})
})
}
另外,安装应用需要权限
"<uses-permission android:name="android.permission.INSTALL_PACKAGES"/>"
"<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES"/>"
评论 (0)