plus.downloader
Downloader 模块管理网络文件下载任务,用于从服务器下载各种文件,并支持跨域访问操作。通过 plus.downloader 获取下载管理对象。Downloader 下载使用 HTTP 的 GET/POST 方式请求下载文件,符合标准 HTTP/HTTPS 传输协议。
下载文件并显示下载进度,可与后端配合实现 APP 在线更新(通过当前 APP 的版本与数据库中所存的 APP 最新版本进行比较,若当前不是最新版本则下载更新)
/**
* 下载任务状态枚举
*/
enum TASK_STATE {
'开始' = 1,
'已连接到服务器' = 2,
'已接受到数据' = 3,
'下载完成' = 4,
}
/**
* @params { url } 下载文件资源地址
* @params { options } 下载任务的参数,常用 "filename" 保存时更改文件名称
* @params { downloadcallback } 正在下载的回调
* @params { finishedcallback } 下载完成的回调
* */
export default (url: string, options?: any, downloadcallback?: any, finishedcallback?: any) => {
// 保存下载进度
let downloadProgress: string;
// 创建下载任务
const downloadtask = plus.downloader.createDownload(url, options, (e: any, status: number) => {
// 下载成功
if (status == 200) {
// e.filename 是文件在保存在本地的相对路径,使用下面的 API 可转为绝对路径
const fileSaveUrl = plus.io.convertLocalFileSystemURL(e.filename);
// 调用相应的默认的第三方程序打开文件
plus.runtime.openFile(e.filename);
} else {
// 清除下载任务
plus.downloader.clear();
}
});
// 添加下载任务事件监听器
downloadtask.addEventListener('statechanged', (task: any) => {
if (!downloadtask) {
return;
}
switch (task.state) {
case TASK_STATE['开始']:
break;
case TASK_STATE['已连接到服务器']:
break;
case TASK_STATE['已接受到数据']:
// 更新下载进度
const currentProgress =
task.downloadedSize && task.totalSize ? task.downloadedSize / task.totalSize : 0;
const handleProgress = parseInt(String(currentProgress * 100));
downloadProgress = `${handleProgress} %`;
if (downloadcallback) {
downloadcallback(downloadProgress);
}
break;
case TASK_STATE['下载完成']:
if (finishedcallback) {
finishedcallback();
}
break;
}
});
// 开始下载任务
downloadtask.start();
};