vue中axios使用post请求下载文件中文乱码

 

1、首先我们需要单独封装或者自己在新建axios的时候,需要加上:responseType: "blob", 例如:

 let param = Object.assign({}, this.form, {
        pageIndex: "1",
        pageSize: "1000",
      });
      axios({
        method: "post",
        url:axios.defaults.baseM3URL+ "/find/logs/export",
        responseType: "blob",
        data: param,
      }).then((res) => {})

2、当前这样做还是远远不够滴,blob的默认编码方式是utf-8,所以就算我们下载下来文档,中文还是乱码的,我们需要将其转换为gbk格式,如何转换呢?在接口请求的出参的最前面加上ufeff,下面是全部代码仅供参考,亲测有效哦

startDownload() {
      let param = Object.assign({}, this.form, {
        pageIndex: "1",
        pageSize: "1000",
      });
      axios({
        method: "post",
        url:axios.defaults.baseM3URL+ "/find/logs/export",
        responseType: "blob",
        data: param,
      }).then((res) => {
        debugger
        let today = new Date();
        let tadayDate =
          today.getFullYear() +
          "-" +
          (today.getMonth() + 1) +
          "-" +
          today.getDate();
        const fileName = "日志查询-" + tadayDate + ".csv";
         let  resdata = "ufeff" + res.data;
        let blob = new Blob([resdata], { type: 'text/csv,charset=UTF-8'});
        if (window.navigator.msSaveOrOpenBlob) {
          //msSaveOrOpenBlob方法返回bool值
          navigator.msSaveBlob(blob, fileName); //本地保存
        } else {
          var link = document.createElement("a"); //a标签下载
          link.href = window.URL.createObjectURL(blob);
          link.download = fileName;
          link.click();
          window.URL.revokeObjectURL(link.href);
        }
      })
    },