如果传输的参数是对象形式:
api
// 下载测试
export const downLoadExcal = (data) => {
return instancejava.get("/sso/download",{
data,responseType: 'blob' // 需要制定类型(这个写法如果还存在错误的话就改成-->{responseType:'blob'})
});
};
如果传输的参数是fromdata格式:
export const downLoadExcal = (data) => {
return instancejava.post("/files/getCompanyDayExcel",
data,{responseType:'blob'}
);
};
就接口位置不同,下面就相同了
index.vue文件
downLoad(){
downLoadExcal().then(res=>{ // 接口
// let fileName = res.headers['content-disposition'].split('=')[1] // 命名
// let suffix = fileName.slice(fileName.length-5,fileName.length) // 切取.xsls后缀
// let now = new Date().getTime(); // 时间戳
// fileName = now+suffix // 重命名=>时间戳+文件后缀
// let objectUrl = URL.createObjectURL(new Blob([res.data])) // 文件地址
// const link = document.createElement('a') //创建a标签用于文件下载
// link.download = fileName // 文件名
// link.href = objectUrl //赋值下载路径
// link.click() //点击a标签触发
// document.body.removeChild(link);//删除a标签
// 或者直接命名
let objectUrl = URL.createObjectURL(new Blob([res.data]))// 文件地址
const link = document.createElement('a') //创建a标签用于文件下载
link.download = new Date().getTime()+".xlsx"
link.href = objectUrl //赋值下载路径
link.click() //点击a标签触发
document.body.removeChild(link);//删除a标签
}).catch((err)=>{
console.log(err)
})
}
网上还有另外一个方法
let blob = new Blob([res], {type: "application/vnd.ms-excel"});//type是文件类,详情可以参阅blob文件类型
let objectUrl = URL.createObjectURL(blob);//生成下载链接
let a=document.createElement('a');//创建a标签用于文件下载
a.href=objectUrl;//赋值下载路径
a.download='数据表格.xls';//下载的文件名称(非必填)
document.body.appendChild(a);//插入DOM树
a.click();//点击a标签触发
document.body.removeChild(a);//删除a标签
服务端的参数:
response.setContentType("application/vnd.ms-excel;charset=utf-8");
response.setHeader("Content-Disposition","attachment;filename=" + fileName + EXCEL03_SUFFIX);