后端返回的文件流格式
axios返回拦截 request.js
// 响应拦截器
service.interceptors.response.use(
// 如果您想获得http信息,如头或状态请返回响应=>响应
// 通过自定义代码确定请求状态,这里只是一个例子,您也可以通过HTTP状态码来判断状态
response => {
// 导出excel
const headers = response.headers
if (headers['content-type'] === 'application/octet-stream') {
return response
}
const res = response.data
if (res.code !== 200 || !res.success) {
Message({
message: res.msg || 'Error',
type: 'error',
duration: 5 * 1000
})
// 50008:非法令牌;50012:其他客户端登录;401:令牌过期;
if (res.code === 401) {
MessageBox.confirm('已注销,您可以取消停留在此页面,或重新登录', 'Confirm logout', {
confirmButtonText: 'Re-Login',
cancelButtonText: 'Cancel',
type: 'warning'
}).then(() => {
store.dispatch('user/resetToken').then(() => {
location.reload()
})
})
}
} else {
return res
}
},
api.js
import request from '@/utils/request'
// 导出excel到流
export function OrderExportExcelToStream(data) {
return request({
url: '/api/Order/OrderExportExcelToStream',
method: 'post',
data,
responseType: 'blob',
headers: {
'Content-Type': 'application/json'
},
})
}
页面调用 index.vue
import { OrderExportExcelToStream } from '@/api/packet'
//导出Excel
entOrderExportExcel() {
const newArr = JSON.parse(JSON.stringify(this.options))
newArr.forEach((element, index) => {
element.orderExportExcelFieldList = element.checkedCities
})
const data = {
trackNoList: this.trackNoList,
orderExportExcelFieldGroupList: newArr
}
OrderExportExcelToStream(data).then(res => {
console.log(res);
//创建一个隐藏的a连接,
const link = document.createElement('a');
let blob = new Blob([res.data], {type: 'application/vnd.ms-excel'});
link.style.display = 'none';
//设置连接
link.href = URL.createObjectURL(blob);
link.download = '订单信息';
document.body.appendChild(link);
//模拟点击事件
link.click();
})
},
后端返回base64格式
// base64文件导出
/*
data:文件base64
type:文件类型
fileName:文件名
*/
export function fileBase64Export(data, type, fileName) {
let url = 'data:application/' + type + ';base64,' + data
// 创建a标签
const link = document.createElement('a')
// 设置隐藏
link.style.display = 'none'
//设置链接
link.href = url
// 设置下载的文件名
link.download = fileName
// 将a标签插入到页面中
document.body.appendChild(link)
//模拟点击事件
link.click()
}