用js生成a標簽下載文件并攜帶請求頭的兩種方法
下載方式的兩種方式
在我們開發(fā)當中會遇到下載文件的這種需求,但是這種里面還會細分為兩種下載
1.直接下載、2.需要攜帶一定的權(quán)限信息才可以下載,例如攜帶token
方式一(直接下載)
let a = document.createElement("a");//創(chuàng)建a標簽 a.setAttribute("href", ConfigBaseURL + "/downSong?id=" + id);//設置文件下載地址 a.setAttribute('target', '_blank');//在當前頁面創(chuàng)建下載 document.body.appendChild(a);//添加到body a.click();//觸發(fā)事件 document.body.removeChild(a);//移除標簽
方式二(設置請求頭下載)
在 JavaScript 中使用
<a>
標簽下載文件時,直接通過<a>
標簽的點擊事件觸發(fā)下載,是無法設置請求頭的,因為這是一個簡單的 GET 請求。如果你需要設置請求頭,通常會使用 XMLHttpRequest 或 Fetch API 進行更復雜的請求。
以下是使用 Fetch API 的例子,其中可以設置請求頭:
// 創(chuàng)建一個點擊事件觸發(fā)下載 function downloadFile() { // 文件下載地址 const fileUrl = 'https://example.com/path/to/file'; // 設置請求頭 const headers = new Headers(); headers.append('Authorization', 'Bearer YourAccessToken'); // 設置授權(quán)頭,替換YourAccessToken為實際的訪問令牌 // 發(fā)起 Fetch 請求 fetch(fileUrl, { method: 'GET', headers: headers, }) .then(response => response.blob()) .then(blob => { // 創(chuàng)建一個虛擬的鏈接元素,模擬點擊下載 const link = document.createElement('a'); link.href = window.URL.createObjectURL(blob); link.download = 'filename.ext'; // 設置下載文件名,替換filename.ext為實際的文件名和擴展名 document.body.appendChild(link); // 模擬點擊 link.click(); // 移除虛擬鏈接元素 document.body.removeChild(link); }) .catch(error => console.error('下載失?。?, error)); } // 觸發(fā)下載 downloadFile();
擴展
問:js用創(chuàng)建a標簽來直接下載是可行的。為什么還要將a標簽添加進頁面,直接下載不可以嗎
答:在某些情況下,直接下載是可以的,但在其他情況下,為了確保兼容性和模擬用戶點擊的行為,將a
標簽添加到頁面并觸發(fā)點擊事件是一種更可靠的方式。
總結(jié)
到此這篇關于用js生成a標簽下載文件并攜帶請求頭的兩種方法的文章就介紹到這了,更多相關js生成a標簽下載文件內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
uniapp使用uni自帶websocket進行即時通訊詳細步驟
在開發(fā)程序過程中通信功能還是比較常用到的,下面這篇文章主要給大家介紹了關于uniapp使用uni自帶websocket進行即時通訊的詳細步驟,文中通過代碼介紹的非常詳細,需要的朋友可以參考下2023-11-11Bootstrap select實現(xiàn)下拉框多選效果
這篇文章主要為大家詳細介紹了Bootstrap select實現(xiàn)下拉框多選效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下2016-12-12js 數(shù)字、字符串、布爾值的轉(zhuǎn)換方法(必看)
下面小編就為大家?guī)硪黄猨s 數(shù)字、字符串、布爾值的轉(zhuǎn)換方法(必看)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-04-04關于javascript中的promise的用法和注意事項(推薦)
這篇文章主要介紹了關于javascript中的promise的用法和注意事項,需要的朋友可以參考下2021-01-01