下载文件到指定文件夹

下载文件到指定文件夹

KongHen02
2023-12-11 / 0 评论 / 340 阅读 / 正在检测是否收录...
温馨提示:
本文最后更新于2024年04月11日,已超过36天没有更新,若内容或图片失效,请留言反馈。

首先看官方给的下载方法:


// 以下载应用为例
// 使用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"/>"

演示图

1

评论 (0)

取消