前端下载excel文件的两种方法

1. 后端直接返回下载excel的地址链接excelDownUrl:

window.location.href = excelDownUrl; //直接下载excel下载地址

2. 后端返回二进制流文件,前端通过axios 通过Blob 转换excel文件流 下载乱码问题:

axios({
        method: 'GET', //或者POST
        url: '/api',
        params: params,
        responseType: 'blob',
        data:param
}).then(res=>{
        let result=res.data; //如果后端返回的result是进过Blob处理的,直接 window.URL.createObjectURL(result),如果没有,就需要先实例化new Blod处理之后再window.URL.createObjectURL(blob)。
        let blob = new Blob([result], {type: "application/vnd.ms-excel"});  
        let url = window.URL.createObjectURL(blob);
        let link = document.createElement('a');
		link.download = "product.xls";
		link.href = url;
		link.click();
}).catch(err=>{
        console.log(err)
})

3. 后端正常情况下res.data直接返回二进制流文件,异常情况下res.data返回{code:30000,errMsg:"参数错误"}时,前端通过axios 通过Blob 转换excel文件流是否读取json文件成功来下载excel:

axios({
        method: 'GET', 
        url: '/api',
        params: params,
        responseType: 'blob',
        data:param
}).then(res=>{
        const fileread=new FileReader();
		fileread.οnlοad=(e)=>{				
			try{
				const message=JSON.parse(e.target.result)
                console.log(message)							
				
			}catch(e){
				let url = window.URL.createObjectURL(res.data);
				let link = document.createElement('a');
				let timer=new Date().getTime();
				link.download =timer+"product.xls";
				link.href = url;
				link.click();	
			}
		}				
		fileread.readAsText(res.data)
}).catch(err=>{
        console.log(err)
})
发布了200 篇原创文章 · 获赞 37 · 访问量 11万+

猜你喜欢

转载自blog.csdn.net/qq_42231156/article/details/103890292
今日推荐