上传一个文件给后端,后端处理之后可能返回一个文件流也可能返回一个json格式的数据
// 上传文件之后返回一个下载文件
export const uploadAndDownload = (url, file, fileName, headers) => {
const formData = new FormData()
formData.append('file', file)
return new Promise((resolve, reject) => {
axios({
url: url,
method: 'post',
data: formData,
responseType: 'blob',
headers: { 'Content-Type': 'multipart/form-data', ...headers }
})
.then(res => {
if (res.type === 'application/json') {
// json 格式数据
let reader = new FileReader()
reader.readAsText(res, 'utf-8')
reader.onload = e => {
let a = JSON.parse(e.target.result)
console.log('a', a)
resolve(a)
}
return
}
// 文件流
// 将文件流转成blob形式
const blob = new Blob([res], { type: 'application/vnd.ms-excel' })
const filename = `${fileName}.xls`
// 创建一个超链接,将文件流赋进去,然后实现这个超链接的单击事件
const elink = document.createElement('a')
elink.download = filename
elink.style.display = 'none'
elink.href = URL.createObjectURL(blob)
document.body.appendChild(elink)
elink.click()
URL.revokeObjectURL(elink.href) // 释放URL 对象
document.body.removeChild(elink)
reject()
})
.catch(e => {
console.log(e)
reject(e)
})
})
}