代码部分

主要流程为,使用uni.downloadFile获取文件的blob地址,然后通过xhr请求该地址获取文件对象,然后通过reader读取他,最后创建一个a标签创建下载

const fileInfo = this.data.stageMore[e.key1].data[e.key2];
if (this.isUrl(e.url)) {
  const fileUrl = e.url;
  const header = fileUrl.split(":");
  let newUrl;
  if (header[0] === "http") {
    newUrl = `https:${header[1]}`;
  }
  uni.downloadFile({
    url: newUrl,
    header: {
      "Content-Type": "application/x-www-form-urlencoded",
    },
    success: function (res) {
      const blobUrl = res.tempFilePath;
      // 创建一个XMLHttpRequest对象
      const xhr = new XMLHttpRequest();
      // 打开一个HTTP GET请求,获取blob对象
      xhr.open("GET", blobUrl);
      // 设置响应类型为blob
      xhr.responseType = "blob";
      xhr.onload = function () {
        // 创建一个FileReader对象
        const reader = new FileReader();
        // 当FileReader完成读取时,创建一个下载链接并模拟点击下载链接
        reader.onload = function (event) {
          const link = document.createElement("a");
          link.href = event.target.result;
          link.download = `${fileInfo.filename}.${fileInfo.fileext}`; // 下载的文件名
          document.body.appendChild(link);
          link.click();
          document.body.removeChild(link);
        };

        // 读取blob对象为Data URL格式
        reader.readAsDataURL(xhr.response);
      };
      // 发送HTTP请求
      xhr.send();
    },
    fail: function () {
      // 下载失败的处理逻辑
      console.log("下载失败");
    },
  });
} else {
  window.location.href = e.url;
}

效果部分

uniapp项目使用 uni.downloadFile 时报错 Refused to get unsafe header "content-disposition"

文章目录