springboot 下载模板文件excel到前端浏览器

导出可通过poi,hutool,easyexcel的工具等,今天分享alibaba封装工具EasyExcel中 ExcelWriter的用法

1、pom导入easyexcel引用,版本根据自己项目切换

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>easyexcel</artifactId>
    <version>3.3.4</version>
</dependency>

2、controller 正常写,文件流写到response即可

@GetMapping("/downloadTemp")
public void downloadTemp(HttpServletResponse response) throws IOException {
    configService.downloadTemp(response);
}

3、service 是重点

@Override
public void downloadTemp(HttpServletResponse response) throws IOException {
    //读取 excel目录下标签导入模板.xlsx 模板文件
    String fileName = "导入模板.xlsx";
    // 设置响应头
    response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
    response.setHeader(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=\"" + URLEncoder.encode(fileName, "UTF-8") + "\"");
    // 使用EasyExcel将数据写入到响应的输出流
    ExcelWriter excelWriter = null;
    try {
        // 获取模板文件的输入流
        InputStream templateInputStream = new ClassPathResource("excel/导入模板.xlsx").getStream();
        // 创建一个ExcelWriter实例,用于写入到响应的输出流
        excelWriter = EasyExcel.write(response.getOutputStream()).withTemplate(templateInputStream).build();
        log.info("下载模板成功");
    } catch (IOException e) {
        e.printStackTrace();
        response.reset();
        log.error("下载模板失败");
    } finally {
        // 关闭ExcelWriter
        if (excelWriter != null) {
            excelWriter.finish();
        }
    }
}

注:header 设置导出文件名称要转码,否则报错

此代码可通过try with resources方式优化,可自行修改

4、文件存放在工程 resources下,excel 文件夹中,如图:

5、最最最重要的:pom 增加maven 插件

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-resources-plugin</artifactId>
    <version>2.6</version>
    <configuration>
        <encoding>UTF-8</encoding>
        <nonFilteredFileExtensions>
            <!--不加这一行,xlsx文件会被过滤,然后在maven build的时候,去target下看对应的xlsx就是损坏的-->
            <nonFilteredFileExtension>xlsx</nonFilteredFileExtension>
        </nonFilteredFileExtensions>
    </configuration>
</plugin>

注:<nonFilteredFileExtension>xlsx</nonFilteredFileExtension> 包含在 <nonFilteredFileExtensions> 里面,网上好多资源都是错的


------------------分割线----------------------

以上是本次分享

原文链接:,转发请注明来源!