后端生成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创建临时链接进行文件下载

相关推荐
我的心巴1 小时前
vue-print-nb 打印相关问题
前端·vue.js·elementui
coderYYY2 小时前
element树结构el-tree,默认选中当前setCurrentKey无效
前端·javascript·vue.js
程序员秘密基地3 小时前
基于vscode,idea,java,html,css,vue,echart,maven,springboot,mysql数据库,在线考试系统
java·vue.js·spring boot·spring·web app
程序员-小李3 小时前
VuePress完美整合Toast消息提示
前端·javascript·vue.js
沉到海底去吧Go13 小时前
【行驶证识别成表格】批量OCR行驶证识别与Excel自动化处理系统,行驶证扫描件和照片图片识别后保存为Excel表格,基于QT和华为ocr识别的实现教程
自动化·ocr·excel·行驶证识别·行驶证识别表格·批量行驶证读取表格
萌萌哒草头将军13 小时前
🚀🚀🚀Prisma 发布无 Rust 引擎预览版,安装和使用更轻量;支持任何 ORM 连接引擎;支持自动备份...
前端·javascript·vue.js
ai产品老杨16 小时前
减少交通拥堵、提高效率、改善交通安全的智慧交通开源了。
前端·vue.js·算法·ecmascript·音视频
张老爷子18 小时前
记录uniapp开发安卓使用webRTC实现语音推送
vue.js
发渐稀18 小时前
vue项目引入tailwindcss
前端·javascript·vue.js
vanora111121 小时前
Vue在线预览excel、word、ppt等格式数据。
前端·javascript·vue.js