// 全局公共下载方法
downloadFile(data, name = '导出文件', type = 'xlsx') {
if (!data) {
return
}
if (data.data.type === 'application/json') {
// json 流数据处理
const reader = new FileReader()
reader.addEventListener('loadend', (data) => {
// 会有一个target属性里包含了返回的JSON
if (data.target && data.target.result) {
let result = data.target.result
// 进行自定义校验
if (typeof result === 'string') {
result = JSON.parse(data.target.result)
console.log('result:', result)
// 自定义处理
if (result.code !== '000000') {
Message.warning(result.message)
}
}
}
})
// 数据解析为json,理解为读取文件数据
reader.readAsText(data.data)
return
}
const isIE = (!!window.ActiveXObject || 'ActiveXObject' in window)
if (isIE) {
const blob = new Blob([data.data], {
type: `application/${type};charset=utf-8;`
})
window.navigator.msSaveOrOpenBlob(blob, name + `.${type}`)
} else {
const url = window.URL.createObjectURL(new Blob([data.data], { 'type': `application/${type}` }))
const link = document.createElement('a')
link.style.display = 'none'
link.href = url
link.setAttribute('download', name + `.${type}`)
document.body.appendChild(link)
link.click()
URL.revokeObjectURL(link.href)
document.body.removeChild(link)
}
},
// 下载文件流
download(data, name = '导出文件', type = 'xlsx') {
if (!data) {
return
}
const blobData = getBlob(data)
const isIE = (!!window.ActiveXObject || 'ActiveXObject' in window)
if (isIE) {
const blob = new Blob(blobData, {
type: `application/${type};charset=utf-8;`
})
window.navigator.msSaveOrOpenBlob(blob, name + `.${type}`)
} else {
const url = window.URL.createObjectURL(new Blob(blobData, { 'type': `${type}` }))
console.log(url)
const link = document.createElement('a')
link.style.display = 'none'
link.href = url
link.setAttribute('download', name + `.${type}`)
document.body.appendChild(link)
link.click()
URL.revokeObjectURL(link.href)
document.body.removeChild(link)
}
function getBlob(base64) {
return b64toByte(base64)
}
// 正常base64要掉一下当前方法 此处base64没有文件前缀 所以不用调该方法
// function getData (base64) {
// return base64.substr(base64.indexOf('base64,') + 7, base64.length)
// }
function b64toByte(b64Data, sliceSize) {
sliceSize = sliceSize || 512
const byteCharacters = window.atob(b64Data)
const byteArrays = []
for (let offset = 0; offset < byteCharacters.length; offset += sliceSize) {
const slice = byteCharacters.slice(offset, offset + sliceSize)
const byteNumbers = new Array(slice.length)
for (let i = 0; i < slice.length; i++) {
byteNumbers[i] = slice.charCodeAt(i)
}
const byteArray = new Uint8Array(byteNumbers)
byteArrays.push(byteArray)
}
return byteArrays
}
},
导出 文件流 和 导出 base64 文件流
最新推荐文章于 2024-07-09 15:10:55 发布