在前后端分離的項目中涉及跨域問題,通常都會使用token進行驗證。
最近在前后端分離的項目中在一個問題上搞了很久,就是以前下載附件或者導出數據為文件的時候,在以前的那些項目前端可以直接用 window.location.href='后端url',window.open(url)或者其他的方式,但是在前后端分離中這種方式不能把token也一起傳到后端進行請求,導致權限不夠訪問不了后端。
最后在多方面的嘗試下,也和同事一起討論,最后這么解決(直接附代碼):
1 /** 2 * 導出用戶列表 3 */ 4 private exportUsers(){ 5 this.http.doPost({ 6 url: 'system/sysmanager/user/exportUsers', 7 responseType:ResponseContentType.Blob, 8 body:this.form, //傳入后端的表單數據 9 success: (req, res) => { 10 var blob = new Blob([res.json()]); //創建一個blob對象 11 var a = document.createElement('a'); //創建一個<a></a>標簽 12 a.href = URL.createObjectURL(blob); // response is a blob 13 a.download = "用戶列表.xlsx"; //文件名稱 14 a.style.display = 'none'; 15 document.body.appendChild(a); 16 a.click(); 17 a.remove(); 18 } 19 }); 20 }
開始以為后端代碼需要更改,其實后端代碼不需要更改,輸出的是輸出流、或者字節數組前端都可以進行轉換。
這個博客有點簡短,如果有什么意見或者問題歡迎大家指教。