app 下载文件方法

566 阅读1分钟

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();
};