vue中下載文件后無(wú)法打開(kāi)的坑及解決
vue下載文件后無(wú)法打開(kāi)
今天在項(xiàng)目開(kāi)發(fā)的時(shí)候臨時(shí)要添加個(gè)導(dǎo)出功能我就寫(xiě)了一份請(qǐng)求加導(dǎo)出得代碼
代碼:
//導(dǎo)出按鈕放開(kāi)
exportDutySummarizing (dataRangeInfo) {
const params = {
departmentName: dataRangeInfo.name,
departmentQode: dataRangeInfo.qode
}
//拼接所需得url
const baseUrl = Constants.SERVICES.duty + Constants.DUTY_SUMMARIZING_EXPORT
this.$axios({
method: 'POST',
url: utils.strFormat(baseUrl, {
departmentName: params.departmentName,
departmentQode: params.departmentQode
}),
headers: {
Authorization: 'bearer ' + Cookies.get('Access-Token'),//token
'Content-Type': 'application/json'
},
responseType: 'blob',//類(lèi)型 這個(gè)必須要
data: {//參數(shù)
a: '1'
}
})
.then((response) => {
//公共的下載方法 在下面展示
utils.download(response, dataRangeInfo.name + '名字.xlsx')
})
.catch(() => { })
}
//公共的下載方法
util.download = function (data, filename) {
if (!data && !filename) {
return
}
let url = window.URL.createObjectURL(new Blob([data]))
let link = document.createElement('a')
link.style.display = 'none'
link.href = url
link.setAttribute('download', filename)
document.body.appendChild(link)
link.click()
}到這里請(qǐng)求文件流和導(dǎo)出文件得方法都已經(jīng)寫(xiě)完了,這里面有的坑呢 打開(kāi)就是返回得數(shù)據(jù),大概就是你new Blob([data])得時(shí)候這個(gè)data是否是文件流,這個(gè)例子后端直接給我返回了文件流所以就直接使用了 一邊都是res.data這樣使用,再有就是responseType: 'blob',這個(gè)在請(qǐng)求文件流時(shí)請(qǐng)求頭中必須要寫(xiě),其他就沒(méi)什么了。
如果到這里下載下來(lái)的文件還是無(wú)法打開(kāi)請(qǐng)往下看
下面就要說(shuō)的就是mockjs了
mockjs 會(huì)攔截axios, 初始化的時(shí)候給攔截響應(yīng)設(shè)置了 responseType: ' ',
所以只需要把 mockjs注釋掉或者在.env把VUE_APP_BUILD_MODE設(shè)置成nomock中就可以了.
改完記得重啟項(xiàng)目!

總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Vue3組件異步更新和nextTick運(yùn)行機(jī)制源碼解讀
這篇文章主要為大家介紹了Vue3組件異步更新和nextTick運(yùn)行機(jī)制源碼解讀,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-03-03
elementUI el-input 只能輸入正整數(shù)驗(yàn)證的操作方法
這篇文章主要介紹了elementUI el-input 只能輸入正整數(shù)驗(yàn)證,本文給大家詳細(xì)講解對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-11-11
axios請(qǐng)求的一些常見(jiàn)操作實(shí)戰(zhàn)指南
axios是一個(gè)輕量的HTTP客戶(hù)端,它基于XMLHttpRequest服務(wù)來(lái)執(zhí)行 HTTP請(qǐng)求,支持豐富的配置,支持Promise,支持瀏覽器端和 Node.js 端,下面這篇文章主要給大家介紹了關(guān)于axios請(qǐng)求的一些常見(jiàn)操作,需要的朋友可以參考下2022-09-09

