后端返回文件流和json格式的方式進行文件下載導出


fetch({
        url: this.exportUrl,
        method: "post",
        data: obj,
        noFormat: true,
        headers: {
          "Content-Type": "application/json; application/octet-stream"
        },
        responseType: "arraybuffer"
      }).then(result => {
        if (result.data.error_code) {
          this.$hMessage.error(result.data.error_message || "導出失敗!");
          return;
        }
        var b = new Blob([result.data], { type: "application/vnd.ms-excel" });
        // 根據傳入的參數b創建一個指向該參數對象的URL
        var url = URL.createObjectURL(b);
        var link = document.createElement("a");
        // 導出的文件名
       
        let fileName = "demo.xlsx";
        link.download = fileName;
        link.href = url;
        link.click();
      });

1. 接口返回的類型是文件流的格式

 

fetch({
        url: this.exportUrl,
        method: "post",
        data: obj,
        noFormat: true,
        responseType: "json"
      }).then(result => {
        if (result.data.error_code) {
          this.$hMessage.error(result.data.error_message || "導出失敗!");
          return;
        }
    // 核心 將base64的字符串轉為文件流
        function dataURLtoBlob(base64Str) {
          var bstr = atob(base64Str), n = bstr.length, u8arr = new Uint8Array(n);
          while (n--) {
            u8arr[n] = bstr.charCodeAt(n);
          }
    // 下載的是excel格式的文件
          return new Blob([u8arr], { type: "application/vnd.ms-excel" });
        }
        var blob = dataURLtoBlob(result.data.result.base64);
        var downloadUrl = window.URL.createObjectURL(blob);

        var anchor = document.createElement("a");
        anchor.href = downloadUrl;
        anchor.download = decodeURI(result.data.result.filename);
        anchor.click();
        // window.URL.revokeObjectURL(blob);
      }).catch((e) => {
        this.$hMessage.error(e || "導出失敗!");
      });

2. 接口返回的類型是json格式,里面字段對應base64格式的文件

 

        $objPHPExcel->getActiveSheet()->setTitle('productaccess');      //設置sheet的名稱
        $objPHPExcel->setActiveSheetIndex(0);                   //設置sheet的起始位置
        $PHPWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, "Excel2007");
        ob_start();
        $PHPWriter->save("php://output"); //表示在$path路徑下面生成demo.xlsx文件
        $buf1 = ob_get_contents();
        ob_end_clean();
        return $this->returnData(0, '成功', ['data' => base64_encode($buf1)]);

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM