前端通過后端返回的文件流下載excel文件方法如下:
downloadExlFile(data, fileName) {
let blob = new Blob([data], {
type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet; charset=utf-8'
})
let a = document.createElement('a')
let url = window.URL.createObjectURL(blob)
a.href = url
a.download = fileName
document.body.appendChild(a)
a.style.display = 'none'
a.click()
window.URL.revokeObjectURL(url)
}
但是我遇到一個問題:就是下載文件成功了但是打不開,一看是文件損壞。
后來瀏覽了好多篇文章后發(fā)現(xiàn),就因為main.js中引入了mock.js,但其實并沒有使用,就算沒有使用也會攔截到我的接口請求并改變返回的內(nèi)容
這是被改變后的樣子,就算接口請求里面responseType設(shè)置為blob,但輸出接口返回仍然是下面的這個樣子,且request被改為MockXMLHttpRequest

image.png
正常的應(yīng)該是返回data為Blob對象,request是一個XMLHttpRequest對象

image.png
結(jié)論就是,在main.js中注釋掉mock.js就好啦!~~