后端生成excel文件,VUE请求如何下载excel文件

1、后端提供下载文件接口,例如

java 复制代码
@GetMapping({"/excelDownload"})
    public void myExcelDownload(HttpServletResponse response) throws IOException {
        // 准备表头数据(中文名)
        List<String> header = generateHeader();
        // 设置响应头信息
        response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
        response.setCharacterEncoding("UTF-8");
        String fileName = "测试模板.xlsx"; // 下载文件名
        String encodedFileName = URLEncoder.encode(fileName, String.valueOf(StandardCharsets.UTF_8));
        response.setHeader("Content-disposition", "attachment;filename=" + encodedFileName);
        // 获取输出流
        OutputStream outputStream = response.getOutputStream();
        // 使用 EasyExcel 创建 ExcelWriter 对象
        ExcelWriter excelWriter = EasyExcel.write(outputStream).build();
        // 写入 Excel
        WriteSheet writeSheet = EasyExcel.writerSheet("Sheet1").build();
        excelWriter.write(new ArrayList<>(), writeSheet);
        // 写入表头
        List<List<String>> data = new ArrayList<>();
        data.add(header);
        excelWriter.write(data, writeSheet);
        excelWriter.finish();
        outputStream.close();
    }
  • response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"): 设置响应内容类型为Excel文件格式。
  • response.setCharacterEncoding("UTF-8"): 设置字符编码为UTF-8。
  • String encodedFileName = URLEncoder.encode(fileName, String.valueOf(StandardCharsets.UTF_8)): 对文件名进行UTF-8编码,防止中文文件名乱码。
  • response.setHeader("Content-disposition", "attachment;filename=" + encodedFileName): 设置响应头的Content-Disposition属性为attachment,表示这是一个附件下载,并指定下载的文件名。

总结

这段两段代码通过Spring Boot和EasyExcel库实现了一个简单的Excel文件下载功能。它首先设置了响应头信息,然后使用EasyExcel创建ExcelWriter对象,并通过输出流将Excel数据写入到响应中,最终提供给用户下载。

2、前端vue如何请求接口下载文件

java 复制代码
 download() {
  axios({
    url: $$ContextPath.webContext + '/download', // 后端下载接口的URL
    method: 'GET', // 使用GET方法请求
    responseType: 'blob', // 设置响应类型为blob,以便处理文件数据
  }).then((response) => {
    // 创建一个URL对象,将Blob对象包装成一个临时的可访问URL
    const url = window.URL.createObjectURL(new Blob([response.data]));
    // 创建一个<a>元素,用于模拟点击下载文件
    const link = document.createElement('a');
    link.href = url;
    // 设置下载文件的名称
    link.setAttribute('download', '测试模板.xlsx');
    // 将<a>元素添加到文档中
    document.body.appendChild(link);
    // 模拟点击下载
    link.click();
    // 移除<a>元素
    link.remove();
    // 释放创建的URL对象,避免内存泄漏
    window.URL.revokeObjectURL(url);
  }).catch(error => console.error('Download error:', error)); // 捕获并打印下载过程中的错误
},

总结

这段代码实现了通过axios发送GET请求下载文件,并利用Blob和URL.createObjectURL创建临时链接进行文件下载

相关推荐
小迷糊的学习记录2 小时前
Vuex 与 pinia
前端·javascript·vue.js
利刃大大2 小时前
【Vue】Element-Plus快速入门 && Form && Card && Table && Tree && Dialog && Menu
前端·javascript·vue.js·element-plus
小毛驴8503 小时前
Vue 路由示例
前端·javascript·vue.js
TT哇6 小时前
【实习 】银行经理端两个核心功能的开发与修复(银行经理绑定逻辑修复和线下领取扫码功能开发)
java·vue.js
星光不问赶路人7 小时前
vue3使用jsx语法详解
前端·vue.js
CodeKwang7 小时前
Qt实战:简易Excel表格 | 附完整源码
qt·excel·qtabwidget·qt控件
weixin79893765432...8 小时前
Vue 组件的更新过程(编译系统 + 响应式系统 + 虚拟 DOM & Diff)
vue.js
脸大是真的好~8 小时前
EasyExcel的使用
java·excel
我是伪码农8 小时前
Vue 智慧商城项目
前端·javascript·vue.js
小书包酱9 小时前
在 VS Code中,vue2-vuex 使用终于有体验感增强的插件了。
vue.js·vuex