uniapp文件下载

uni.downloadFile({
  //只能是GET请求
  url: base.baseUrl + `/electricStation/exportData?siteId=1&startTime=${e[0]}&endTime=${e[1]}`, //请求地址
  header: {
    Authorization: 'Bearer ' + uni.getStorageSync('SET_TOKEN') //请求头。
  },
  success: res => {
  //下载成功
  if (res.statusCode === 200) {
    var sFilePath = res.tempFilePath;
    //保存文件
    uni.saveFile({
      tempFilePath: res.tempFilePath, //下载成功之后返回的临时路径
      success: e => {
        console.log(e);
        var savedFilePath = e.savedFilePath;

        //解决下载返回文件名和保存文件名不一致问题
        this.fSetFileName(e.savedFilePath, sFilePath);
      },
      fail: e => {
        uni.showToast({
          title: `保存失败` + e
        });
      }
     });
    }
  },
  fail: e => {
    uni.showToast({
      title: `文件下载失败` + e,
      icon: 'none'
    });
  }
});

 

fSetFileName(sFilePath, sFileName) {
  var sFileName = sFileName.split('/')[sFileName.split('/').length - 1]; //原来的文件名
  var aFileUrl = sFilePath.split('/').splice(0, sFilePath.split('/').length - 1); //saveFile API保存的本地地址
  var url = base.baseUrl + `/electricStation/exportData?siteId=1&startTime=${this.range[0]}&endTime=${this.range[1]}`; //请求地址
  let dtask = plus.downloader.createDownload(
    url,
    {
      filename: 'file://' + aFileUrl.join('/') + '/' + sFileName //利用保存路径,实现文件的重命名
    },
    (d, status) => {
      if (status == 200) {
        let fileSaveUrl = plus.io.convertLocalFileSystemURL(d.filename);
        this.fGetSavedFileList();

        uni.openDocument({
          filePath: fileSaveUrl,
          fail: e => {
            uni.showToast({
              title: `打开失败` + e
            });
          }
        });
      } else {
        //下载失败
        plus.downloader.clear(); //清除下载任务
      }
    }
  );
  dtask.setRequestHeader('Authorization', 'Bearer ' + uni.getStorageSync('SET_TOKEN'));
  dtask.start();
},

// 获取已下载列表
fGetSavedFileList() {
  uni.getSavedFileList({
    success: res => {
      res.fileList.forEach(oData => {
        let aRray = oData.filePath.split('/');
        let sFileName = aRray[aRray.length - 1].split('.')[0];
        if (parseFloat(sFileName).toString() == 'NaN') {
          //这里是过滤掉文件名是时间戳的文件
          console.log(res.fileList);
        } else {
          //这里是把时间戳的文件删掉
          plus.io.resolveLocalFileSystemURL(oData.filePath, entry => {
            //获取文件对象
            entry.remove(
              entry => {
                plus.console.log('Remove succeeded');
               },
              e => {
                alert(e.message);
              }
            );
          });
        }
      });
    }
  });
}

posted @ 2022-03-25 14:54  远赴人间  阅读(1570)  评论(0编辑  收藏  举报