一、导出文件公用方法
/**
* 导出文件公用方法
* @param {Object} data // 对象信息
* @param {String} url // 下载地址
* @param {String} method // 请求方式
* @param {String} params // 下载参数
* @param {String} type // 下载文件类型 excel/word/zip
* @param {String} fileName // 下载文件名称
*/
Vue.prototype.$exportExcel = function (data) {
axios({
method: data.method,
url: `${data.url}${data.params ? '?' + data.params : ''}`,
responseType: 'blob'
}).then((res) => {
const link = document.createElement('a')
let type = 'application/vnd.ms-excel'
if (data.type === 'excel') {
type = 'application/vnd.ms-excel'
} else if (data.type === 'word') {
type = 'application/msword'
} else if (data.type === 'zip') {
type = 'application/zip'
}
const blob = new Blob([res.data], { type: type })
link.style.display = 'none'
link.href = URL.createObjectURL(blob)
// link.download = res.headers['content-disposition'] //下载后文件名
link.download = data.fileName // 下载的文件名
document.body.appendChild(link)
link.click()
document.body.removeChild(link)
}).catch(error => {
this.$Notice.error({
title: '错误',
desc: '网络连接错误'
})
})
}
二、导出文件方法
/**
* 导出文件方法
* @param {Object} data // 对象信息
* @param {String} url // 下载地址
* @param {String} method // 请求方式
* @param {String} params // 下载参数
* @param {String} baseURL // 基础路径
*/
Vue.prototype.$exportFile = function (datas) {
const { url, method, baseURL, params } = datas
const common = {
url,
method,
baseURL,
headers: { 'token': getToken() },
responseType: 'blob'
}
const postParmas = {
data: {
token: getToken(),
...params
}, ...common
}
const getParmas = {
params: {
token: getToken(),
...params
}, ...common
}
axios(method === 'POST' ? postParmas : getParmas).then((res) => {
// data就是接口返回的文件流
const data = res.data
if (data) {
const attrs = res.headers['content-disposition'].split(';')
// 获取文件名
let fileName = ''
// 不用管fileName在第几个位置,只要=前面是fileName,就取=后面的值
for (let i = 0, l = attrs.length; i < l; i++) {
const temp = attrs[i].split('=')
if (temp.length > 1 && temp[0].trim() === 'filename') {
fileName = temp[1]
break
}
}
fileName = decodeURIComponent(fileName).replace(/\"/g, '')
// 获取数据类型
const type = res.headers['content-type'].split(';')[0]
const blob = new Blob([res.data], { type: type })
const a = document.createElement('a')
// 创建URL
const blobUrl = window.URL.createObjectURL(blob)
a.download = fileName
a.href = blobUrl
document.body.appendChild(a)
// 下载文件
console.log(fileName)
a.click()
// 释放内存
URL.revokeObjectURL(blobUrl)
document.body.removeChild(a)
} else {
console.log('error', data)
}
})
}