Axios 如何通過配置實現通過接口請求下載文件

前言

今天,我寫了 《Nodejs 實現 Mysql 數據庫的全量備份的代碼演示》 和 《NodeJS 基于 Koa, 開發一個讀取文件,并返回給客戶端文件下載》 兩篇文章。在這兩篇文章中,我實現了數據庫的備份,和提供數據庫下載等接口。

但是,在我們給接口加上鑒權以后,直接通過 window.open 或者 axios 的默認配置訪問接口,是不能下載的。

因為,我們的下載接口,是需要用戶鑒權的,所以排除了 window.open 方法。而我們一般配置的 axios 是用來處理接口的 JSON 數據的。所以,這也不支持文件的下載。

怎么辦呢?其實,通過一點點的配置,就可以實現了。

axios

AXIOS 后處理實現

原理也很簡單,我們在接口請求的時候,指定返回的是 blob 對象,然后在后處理里,根據這個配置參數判斷,直接將服務端返回的數據 return 出去即可。

// 創建 axios
const service = axios.create({baseURL: '/api/v1', // url = base url + request urltimeout: 50000 // request timeout
})
// 前處理這里不展示
// service.interceptors.request.use...
service.interceptors.response.use((response) => {// 如果是文件下載,直接返回 responseif (response.config.responseType === 'blob') {return Promise.resolve(response)}// 其他正常邏輯,我們這里不展示了,每個人的習慣和代碼也都不一樣·}
)

調用接口實現文件加載

在調用接口的地方,我們指定返回數據類型為 blob 對象,然后用 js 創建一個臨時下載鏈接,從而實現在瀏覽器中下載文件即可。

request({url: `${ApiName}/${fileName}`,method: 'get',// 指定返回 blob 對象responseType: 'blob'
}).then((response) => {// 獲取文件名const disposition = response.headers['content-disposition']let fileName = 'download'if (disposition) {fileName = disposition.split('filename=')[1]}// 創建下載鏈接const blob = new Blob([response.data])const link = document.createElement('a')link.href = window.URL.createObjectURL(blob)link.download = fileNamelink.click()window.URL.revokeObjectURL(link.href)
})

小結

因為備份數據庫文件的下載是需要鑒權的,所以不能直接下載。通過接口請求的方式實現下載的核心代碼就是上面這些了。

可能現在大多數人都直接使用 fetch 來請求接口了吧,如果是這樣的話,這篇文章對你可能就沒什么幫助了。我回頭有空可以補充一篇。

各位看官,如果本文對你有所幫助,麻煩用您發財的小手點個贊吧!謝謝!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/81716.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/81716.shtml
英文地址,請注明出處:http://en.pswp.cn/web/81716.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

IDEA項目推送到遠程倉庫

打開IDEA——>VCS——>Creat Git 選擇項目 push提交到本地 創建遠程倉庫 復制地址 定義遠程倉庫 推送 推送成功

Prompt工程:解鎖大語言模型的終極密鑰

Prompt工程:解鎖大語言模型的終極密鑰 一、引言:Prompt的戰略價值重構 在人工智能技術加速滲透的2025年,Prompt(提示詞)作為連接人類意圖與大語言模型(LLM)的核心接口,其戰略地位已…

架構意識與性能智慧的雙重修煉

架構意識與性能智慧的雙重修煉 ——現代軟件架構師的核心能力建設指南 作者:藍葛亮 ??引言 在當今快速發展的技術環境中,軟件架構師面臨著前所未有的挑戰。隨著業務復雜度的不斷增長和用戶對性能要求的日益嚴苛,如何在架構設計中平衡功能實現與性能優化,已成為每個技術…

Flutter下的一點實踐

目錄 1、背景2、refena創世紀代碼3、localsend里refena的刷新3.1 初始狀態3.2 發起設備掃描流程3.3 掃描過程3.3 刷新界面 4.localsend的設備掃描流程4.1 UDP廣播設備注冊流程4.2 TCP/HTTP設備注冊流程4.3 localsend的服務器初始化工作4.4總結 1、背景 在很久以前,…

Allegro 輸出生產數據詳解

說明 用于PCB裸板的生產可以分別單獨創建文件 光繪數據(Gerber)、鉆孔(NC Drill)、IPC網表;或者通過ODB++或IPC2581文件(這是一個新格式),它包含生產裸板所需要的所有信息 光繪數據 Artwork Gerber 光繪數據一般包含設計中各個層面的蝕刻線路、阻焊、鉛錫、字符等信…

5.LoadBalancer負載均衡服務調用

目錄 一、Ribbon目前也進入維護模式 二、spring-cloud-loadbalancer概述 三、spring-cloud-loadbalancer負載均衡解析 1.負載均衡演示案例-理論 2.負載均衡演示案例-實操 按照8001拷貝后新建8002微服務 啟動Consul,將8001/8002啟動后注冊進微服務 Consul數據持久化配置…

linux安裝ffmpeg7.0.2全過程

?編輯 白眉大叔 發布于 2025年4月16日 評論關閉 閱讀(341) centos 編譯安裝 ffmpeg 7.0.2 :連接https://www.baimeidashu.com/19668.html 下載 FFmpeg 源代碼 在文章最后 一、在CentOS上編譯安裝FFmpeg 以常見的CentOS為例,FFmpeg的編譯說明頁面為h…

視頻逐幀提取圖片的工具

軟件功能:可以將視頻逐幀提取圖片,可以設置每秒提取多少幀,選擇提取圖片質量測試環境:Windows 10軟件設置:由于軟件需要通過FFmpeg提取圖片,運行軟件前請先設置FFmpeg,具體步驟 1. 請將…

java精簡復習

MyBatis批量插入 <insert id"batchInsert" parameterType"java.util.List">INSERT INTO users(name, age) VALUES<foreach collection"list" item"item" separator",">(#{item.name}, #{item.age})</foreac…

IP 網段

以下是關于 IP 網段 的詳細解析&#xff0c;涵蓋基本概念、表示方法、劃分規則及實際應用場景&#xff1a; 一、網段核心概念 1. 什么是網段&#xff1f; 網段指一個邏輯劃分的 IP 地址范圍&#xff0c;屬于同一子網的設備可以直接通信&#xff08;無需經過路由器&#xff09…

模型微調參數入門:核心概念與全局視角

一、引言 在深度學習領域&#xff0c;模型微調已成為優化模型性能、適配特定任務的重要手段。無論是圖像識別、自然語言處理&#xff0c;還是其他復雜的機器學習任務&#xff0c;合理調整模型參數都是實現卓越性能的關鍵。然而&#xff0c;模型微調涉及眾多參數&#xff0c;這…

端口映射不通的原因有哪些?路由器設置后公網訪問本地內網失敗分析

本地網絡地址通過端口映射出去到公網使用&#xff0c;是較為常用的一種傳統方案。然而&#xff0c;很多環境下和很多普通人員在實際使用中&#xff0c;卻往往會遇到端口映射不通的問題。端口映射不通的主要原因包括公網IP缺失&#xff08;更換nat123類似映射工具方案&#xff0…

Git Push 失敗:HTTP 413 Request Entity Too Large

Git Push 失敗&#xff1a;HTTP 413 Request Entity Too Large 問題排查 在使用 Git 推送包含較大編譯產物的項目時&#xff0c;你是否遇到過 HTTP 413 Request Entity Too Large 錯誤&#xff1f;這通常并不是 Git 的問題&#xff0c;而是 Web 服務器&#xff08;如 Nginx&am…

docker-記錄一次容器日志<container_id>-json.log超大問題的處理

文章目錄 現象一、查找源頭二、分析總結 現象 同事聯系說部署在虛擬機里面的用docker啟動xxl-job的服務不好使了&#xff0c;需要解決一下&#xff0c;我就登陸虛擬機檢查&#xff0c;發現根目錄滿了&#xff0c;就一層一層的找&#xff0c;發現是<container_id>-json.l…

Ubuntu 24.04 LTS 和 ROS 2 Jazzy 環境中使用 Livox MID360 雷達

本文介紹如何在 Ubuntu 24.04 LTS 和 ROS 2 Jazzy 環境中安裝和配置 Livox MID360 激光雷達&#xff0c;包括 Livox-SDK2 和 livox_ros_driver2 的安裝&#xff0c;以及在 RViz2 中可視化點云數據的過程。同時&#xff0c;我們也補充說明了如何正確配置 IP 地址以確保雷達與主機…

電腦開機后長時間黑屏,桌面圖標和任務欄很久才會出現,但是可通過任務管理器打開應用程序,如何解決

目錄 一、造成這種情況的主要原因&#xff08;詳細分析&#xff09;&#xff1a; &#xff08;1&#xff09;啟動項過多&#xff0c;導致系統資源占用過高&#xff08;最常見&#xff09; 檢測方法&#xff1a; &#xff08;2&#xff09;系統服務啟動異常&#xff08;常見&a…

uniapp地圖map支付寶小程序汽泡顯示

先看原文地址&#xff1a;map | uni-app官網 氣泡的顯示&#xff0c;可以使用callout和label兩個屬性 但是如果想要氣泡默認顯示&#xff0c;而不是點擊顯示&#xff0c;則用label

信創 CDC 實戰 | OGG、Attunity……之后,信創數據庫實時同步鏈路如何構建?(以 GaussDB 數據入倉為例)

國產數據庫加速進入核心系統&#xff0c;傳統同步工具卻頻頻“掉鏈子”。本系列文章聚焦 OceanBase、GaussDB、TDSQL、達夢等主流信創數據庫&#xff0c;逐一拆解其日志機制與同步難點&#xff0c;結合 TapData 的實踐經驗&#xff0c;系統講解從 CDC 捕獲到實時入倉&#xff0…

Python爬蟲實戰:研究Selenium框架相關技術

1. 引言 1.1 研究背景與意義 隨著互聯網的快速發展,網頁數據量呈爆炸式增長。從網頁中提取有價值的信息成為數據挖掘、輿情分析、商業智能等領域的重要基礎工作。然而,現代網頁技術不斷演進,越來越多的網頁采用 JavaScript 動態加載內容,傳統的基于 HTTP 請求的爬蟲技術難…

【CSS border-image】圖片邊框拉伸不變形,css邊框屬性,用圖片打造個性化邊框

當用圖片做邊框時&#xff0c;還要考慮到一個問題&#xff0c;如何適應邊框的寬高變化&#xff0c;并且圖片不變形&#xff1f;本文深入解析 CSS border-image&#xff0c;用圖片打造個性化邊框。下圖的效果就是利用border-image屬性實現的圖片邊框自適應。 本文將border-imag…