如何在JavaScript實現(xiàn)Blob文件流下載
一、下載
在 JavaScript 中,可以使用瀏覽器提供的 Blob 對象和 URL.createObjectURL() 方法來實現(xiàn)文件流下載。
下面是一個示例代碼,可以幫助了解如何在 JavaScript 中實現(xiàn)文件流下載:
function downloadFile(data, filename, type) {
// 創(chuàng)建 Blob 對象
const blob = new Blob([data], { type: type });
// 判斷當(dāng)前瀏覽器是否是IE,由于IE是沒有download 方法的,需要用msSaveBlob() 或 msSaveOrOpenBlob()
if (window.navigator && window.navigator.msSaveOrOpenBlob) {
// 兼容IE
window.navigator.msSaveOrOpenBlob(blob, filename)
} else {
// 創(chuàng)建 URL 對象
const url = URL.createObjectURL(blob);
// 創(chuàng)建鏈接
const link = document.createElement('a');
link.href = url;
link.download = filename;
// 模擬點擊鏈接進行下載
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
// 釋放 URL 對象
URL.revokeObjectURL(url);
}
}
在這個示例中,我們定義了一個 downloadFile() 函數(shù),這個函數(shù)接受三個參數(shù):data、filename 和 type。其中,data 表示要下載的數(shù)據(jù)流,filename 表示要保存的文件名,type 表示要下載的文件類型。
在函數(shù)中,我們首先使用 Blob 對象創(chuàng)建一個二進制數(shù)據(jù)流,然后使用 URL.createObjectURL() 方法創(chuàng)建一個 URL 對象。接著,我們創(chuàng)建一個鏈接元素,并將這個鏈接元素的 href 屬性設(shè)置為 URL 對象的 URL,將 download 屬性設(shè)置為要保存的文件名。最后,我們模擬點擊鏈接元素,啟動下載操作。
當(dāng)下載完成后,我們需要釋放 URL 對象,以便瀏覽器可以回收這個對象的內(nèi)存。這個操作可以使用 URL.revokeObjectURL()方法來實現(xiàn)。
注意:IE中要使用window.navigator.msSaveOrOpenBlob 或 window.navigator.msSaveBlob來處理Blob對象
用法:
1.msSaveOrOpenBlob:提供保存和打開按鈕
2.msSaveBlob:只提供一個保存按鈕
二、請求
在使用axios請求的時候,加上responseType: 'blob'入?yún)?。請求示例如下?/p>
axios({
// 請求頭
headers: {
Content-Type: 'application/json;charset=utf-8'
},
responseType: 'blob', // // `responseType` 表示瀏覽器將要響應(yīng)的數(shù)據(jù)類型,選項有'arraybuffer', 'document', 'json', 'text', 'stream',瀏覽器專屬:'blob',默認(rèn)是'json'
method: 'get', // 類型根據(jù)實際接口是get還是post
url: '接口URL',
params: {}, // URL參數(shù)
});
因為我們使用的是文件流下載,所以返回的響應(yīng)對象就不是 json 類型,要換成 blob 類型.
三、示例
以下載excel為例:
axios({
headers: {
'Content-Type': 'application/json;charset=utf-8'
},
responseType: 'blob',
method: 'get',
url: '#',
params: {}
}).then(res => {
downloadFile(res, '文件名稱','application/xlsx')
})
實際根據(jù)請求的方法換成是get請求還是post請求,下載不同的文件對應(yīng)不同的 Blob 類型,這邊excel文件下載用的是 application/xlsx,如果是下載別的類型的文件就換別的類型。
Blob相關(guān)的文檔可自行查看鏈接:
https://developer.mozilla.org/zh-CN/docs/Web/API/Blob/type
總結(jié)
到此這篇關(guān)于如何在JavaScript實現(xiàn)Blob文件流下載的文章就介紹到這了,更多相關(guān)JS Blob文件流下載內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
JavaScript設(shè)置失效時間清除本地存儲數(shù)據(jù)的幾種方法
這篇文章介紹了如何使用localStorage和sessionStorage設(shè)置失效時間來清除本地存儲的數(shù)據(jù),并提供了一種自動清除過期數(shù)據(jù)的方法,需要的朋友可以參考下2025-02-02
JavaScript中的object轉(zhuǎn)換成number或string規(guī)則介紹
這篇文章主要介紹了JavaScript中的object轉(zhuǎn)換成number或string規(guī)則介紹,本文講解了object自動轉(zhuǎn)換成string的規(guī)則、object自動轉(zhuǎn)換成number的規(guī)則等內(nèi)容,需要的朋友可以參考下2014-12-12
JavaScript實現(xiàn)清空(重置)文件類型INPUT元素值的方法
這篇文章主要介紹了JavaScript實現(xiàn)清空(重置)文件類型INPUT元素值的方法,結(jié)合實例形式分析了javascript清空input文本框的常用方法與實現(xiàn)技巧,需要的朋友可以參考下2016-11-11

