引入后直接调用:(定义好组件方法后,在页面引入后调用)
// 下载PDF文件
/**
* 解析blob响应内容并下载PDF
* @param {*} res blob响应内容
* @param {String} mimeType MIME类型
*/
export function resolvePdf(res, mimeType) {
const alink = document.createElement('a')
// eslint-disable-next-line no-undef-init
var blob = undefined
if (mimeType) {
blob = new Blob([res.data], { type: mimeType })
} else {
blob = new Blob([res.data])
}
// //从response的headers中获取filename, 后端response.setHeader("Content-disposition", "attachment; filename=xxxx.docx") 设置的文件名;
var contentDisposition = decodeURI(res.headers['content-disposition'])
var fileName = contentDisposition.split('=')
alink.href = URL.createObjectURL(blob)
alink.setAttribute('download', fileName[1])
document.body.appendChild(alink)
alink.click()
document.body.removeChild(alink)
}
// 下载Zip、xlsx文件
/**
* 解析blob响应内容并下载
* @param {*} res blob响应内容
* @param {String} mimeType MIME类型
*/
export function resolveBlob(res, mimeType) {
const aLink = document.createElement('a')
// eslint-disable-next-line no-undef-init
var blob = undefined
if (mimeType) {
blob = new Blob([res.data], { type: mimeType })
} else {
blob = new Blob([res.data])
}
// //从response的headers中获取filename, 后端response.setHeader("Content-disposition", "attachment; filename=xxxx.docx") 设置的文件名;
var patt = new RegExp('filename=([^;]+\\.[^\\.;]+);*')
var contentDisposition = decodeURI(res.headers['content-disposition'])
var result = patt.exec(contentDisposition)
var fileName = result[1]
fileName = fileName.replace(/"/gi, '')
aLink.href = URL.createObjectURL(blob)
aLink.setAttribute('download', fileName) // 设置下载文件名称
document.body.appendChild(aLink)
aLink.click()
document.body.removeChild(aLink)
window.URL.revokeObjectURL(aLink.href)
}
在JS页面里面引入方法,接口调用
import { resolveBlob, resolvePdf } from '@/utils/download'
const mimeMap = {
xlsx: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
zip: 'application/zip',
xml: 'application/xml',
pdf: 'application/pdf',
}
const api = {
xxxxx: '/aaa/bbb/xxxxx'
}
export function XXXXX() {
axios({
responseType: 'blob',
url: api.XXXXX,
method: 'get',
}).then((res) => {
resolveBlob(res, mimeMap.xlsx)
})
}