如何在JavaScript實(shí)現(xiàn)Blob文件流下載
一、下載
在 JavaScript 中,可以使用瀏覽器提供的 Blob
對(duì)象和 URL.createObjectURL()
方法來(lái)實(shí)現(xiàn)文件流下載。
下面是一個(gè)示例代碼,可以幫助了解如何在 JavaScript 中實(shí)現(xiàn)文件流下載:
function downloadFile(data, filename, type) { // 創(chuàng)建 Blob 對(duì)象 const blob = new Blob([data], { type: type }); // 判斷當(dāng)前瀏覽器是否是IE,由于IE是沒(méi)有download 方法的,需要用msSaveBlob() 或 msSaveOrOpenBlob() if (window.navigator && window.navigator.msSaveOrOpenBlob) { // 兼容IE window.navigator.msSaveOrOpenBlob(blob, filename) } else { // 創(chuàng)建 URL 對(duì)象 const url = URL.createObjectURL(blob); // 創(chuàng)建鏈接 const link = document.createElement('a'); link.href = url; link.download = filename; // 模擬點(diǎn)擊鏈接進(jìn)行下載 document.body.appendChild(link); link.click(); document.body.removeChild(link); // 釋放 URL 對(duì)象 URL.revokeObjectURL(url); } }
在這個(gè)示例中,我們定義了一個(gè) downloadFile()
函數(shù),這個(gè)函數(shù)接受三個(gè)參數(shù):data
、filename
和 type
。其中,data 表示要下載的數(shù)據(jù)流,filename 表示要保存的文件名,type 表示要下載的文件類型。
在函數(shù)中,我們首先使用 Blob
對(duì)象創(chuàng)建一個(gè)二進(jìn)制數(shù)據(jù)流,然后使用 URL.createObjectURL()
方法創(chuàng)建一個(gè) URL 對(duì)象。接著,我們創(chuàng)建一個(gè)鏈接元素,并將這個(gè)鏈接元素的 href
屬性設(shè)置為 URL 對(duì)象的 URL,將 download
屬性設(shè)置為要保存的文件名。最后,我們模擬點(diǎn)擊鏈接元素,啟動(dòng)下載操作。
當(dāng)下載完成后,我們需要釋放 URL 對(duì)象,以便瀏覽器可以回收這個(gè)對(duì)象的內(nèi)存。這個(gè)操作可以使用 URL.revokeObjectURL()
方法來(lái)實(shí)現(xiàn)。
注意:IE中要使用window.navigator.msSaveOrOpenBlob
或 window.navigator.msSaveBlob
來(lái)處理Blob對(duì)象
用法:
1.msSaveOrOpenBlob:提供保存和打開(kāi)按鈕
2.msSaveBlob:只提供一個(gè)保存按鈕
二、請(qǐng)求
在使用axios請(qǐng)求的時(shí)候,加上responseType: 'blob'
入?yún)?。?qǐng)求示例如下:
axios({ // 請(qǐng)求頭 headers: { Content-Type: 'application/json;charset=utf-8' }, responseType: 'blob', // // `responseType` 表示瀏覽器將要響應(yīng)的數(shù)據(jù)類型,選項(xiàng)有'arraybuffer', 'document', 'json', 'text', 'stream',瀏覽器專屬:'blob',默認(rèn)是'json' method: 'get', // 類型根據(jù)實(shí)際接口是get還是post url: '接口URL', params: {}, // URL參數(shù) });
因?yàn)槲覀兪褂玫氖俏募飨螺d,所以返回的響應(yīng)對(duì)象就不是 json
類型,要換成 blob
類型.
三、示例
以下載excel為例:
axios({ headers: { 'Content-Type': 'application/json;charset=utf-8' }, responseType: 'blob', method: 'get', url: '#', params: {} }).then(res => { downloadFile(res, '文件名稱','application/xlsx') })
實(shí)際根據(jù)請(qǐng)求的方法換成是get
請(qǐng)求還是post
請(qǐng)求,下載不同的文件對(duì)應(yīng)不同的 Blob
類型,這邊excel文件下載用的是 application/xlsx
,如果是下載別的類型的文件就換別的類型。
Blob
相關(guān)的文檔可自行查看鏈接:
https://developer.mozilla.org/zh-CN/docs/Web/API/Blob/type
總結(jié)
到此這篇關(guān)于如何在JavaScript實(shí)現(xiàn)Blob文件流下載的文章就介紹到這了,更多相關(guān)JS Blob文件流下載內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
javascript中style.left和offsetLeft的用法說(shuō)明
本篇文章主要是對(duì)javascript中style.left和offsetLeft的用法進(jìn)行了說(shuō)明介紹,需要的朋友可以過(guò)來(lái)參考下,希望對(duì)大家有所幫助2014-03-03利用JS實(shí)現(xiàn)簡(jiǎn)單的日期選擇插件
這篇文章主要介紹了利用JS實(shí)現(xiàn)簡(jiǎn)單的日期選擇插件,文中實(shí)現(xiàn)兩種效果的日期選擇,一種是默認(rèn)參數(shù),點(diǎn)擊日期后直接選擇該日期,另一種是顯示按鈕來(lái)設(shè)置時(shí)間,有需要的朋友可以參考借鑒,下面來(lái)一起看看吧。2017-01-01JS獲取當(dāng)前網(wǎng)頁(yè)大小以及屏幕分辨率等
這篇文章主要介紹了JS獲取當(dāng)前網(wǎng)頁(yè)大小以及屏幕分辨率等,方法雖簡(jiǎn)單,但比較實(shí)用,需要的朋友可以參考下2014-09-09淺析JS給原始數(shù)據(jù)類型加屬性和方法為什么不報(bào)錯(cuò)
這篇文章主要想和大家一起探討一下JavaScript中給原始數(shù)據(jù)類型添加屬性和方法為什么不報(bào)錯(cuò),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解下2023-11-11微信小程序自定義彈出模態(tài)框禁止底部滾動(dòng)功能
這篇文章主要介紹了微信小程序自定義彈出模態(tài)框禁止底部滾動(dòng)效果,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-03-03Bootstrap教程JS插件彈出框?qū)W習(xí)筆記分享
這篇文章主要為大家分享了Bootstrap教程JS插件彈出框?qū)W習(xí)筆記,為大家詳細(xì)介紹Bootstrap彈出框的使用方法,感興趣的小伙伴們可以參考一下2016-05-05