Java实现Excel模板下载以及遇到的问题

Java实现Excel模板下载以及遇到的问题

前言:

项目在开发过程中,会用到Excel的导入,导出,复杂一点的Excel可以写好放在项目指定位置,下载时候直接从指定位置获取即可。

代码实现

excel存放的位置:

controller

c 复制代码
 @GetMapping("downloadxxxTemplate")
 @ApiOperation("下载xx-xx导入模板")
 public void downloadxxxTemplate(@RequestParam(value = "fileName") String fileName, HttpServletResponse response) throws IOException {
        dutyRosterService.downloadxxxTemplate(fileName,response);
    }

service

c 复制代码
   /**
     * 下载xxx-xx信息导入模板
     * 
     * @param fileName
     *            文件名
     * @param response
     *            响应
     * @throws IOException
     *             异常
     */
void downloadxxxTemplate(String fileName, HttpServletResponse response) throws IOException;

serviceImpl

c 复制代码
  public void downloadxxxTemplate(String fileName, HttpServletResponse response) throws IOException {
        InputStream inputStream = null;
        BufferedInputStream bis = null;
        BufferedOutputStream bos = null;
        try {
        	// 从类路径中的 excel 目录下获取名为 fileName.xlsx 的 Excel 文件
            inputStream = this.getClass().getClassLoader().getResourceAsStream("excel/" + fileName + ".xlsx");
            if (inputStream == null) {
               // 异常
            }
            bis = new BufferedInputStream(inputStream);
            fileName = URLEncoder.encode(fileName + ".xlsx", "UTF-8");
            // 设置文件下载头
            response.addHeader("Content-Disposition", "attachment;filename=" + fileName);
            // 设置文件ContentType类型,这样设置,会自动判断下载文件类型
            response.setContentType("multipart/form-data");
            bos = new BufferedOutputStream(response.getOutputStream());
            int len = 0;
            while ((len = bis.read()) != -1) {
                bos.write(len);
                bos.flush();
            }
            bos.close();
            bis.close();
            inputStream.close();
        } catch (IOException e) {
        	// 异常
        } finally {
            if (bos != null) {
                bos.close();
            }
            if (bis != null) {
                bis.close();
            }
            if (inputStream != null) {
                inputStream.close();
            }
        }
    }

遇到的问题:

问题一:

excel 存放在resources的excel目录下,一直没有获取到报空指针异常,如下图,但是修改后还是空

从类路径中获取指定名称的资源,并返回一个输入流用于读取该资源的内容。

改为:this.getClass().getClassLoader().getResourceAsStream("excel/" + fileName + ".xlsx");

问题二:

打包 无论是package还是install 在target中excel都没有打进去,如下图:

最后找资料需要在maven依赖添加如下配置即可:

c 复制代码
	
    <build>
        <resources>
        	// 用自己话理解 可能有误
        	// 配置maven打包时候,将指定目录下面的文件打到target里面 
            <resource>
                <directory>src/main/resources</directory>
                <filtering>true</filtering>
            </resource>
        </resources>
	//  maven打包Excel等资源时候,使用maven的filter,导致打包的Excel文件乱码或者损坏添加如下配置即可
		<plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-resources-plugin</artifactId>
                <configuration>
                    <encoding>UTF-8</encoding>
                    <nonFilteredFileExtensions>
                        <nonFilteredFileExtension>xls</nonFilteredFileExtension>
                        <nonFilteredFileExtension>xlsx</nonFilteredFileExtension>
                    </nonFilteredFileExtensions>
                </configuration>
            </plugin>
        </plugins>

再次package时,target多个excel文件夹如下,问题解决

喜欢我的文章的话,点个阅读或者点个点赞,是我编写博客的动力,持续更新中

相关推荐
云和数据.ChenGuang7 小时前
Python 重写(Override)深度解析:从 MRO 到 super() 的完整机制
java·开发语言·人工智能·python·langchain·1024程序员节
摇滚侠7 小时前
《On Java 中文版 基础卷》阅读笔记 实现隐藏 12
java·数据库·笔记
silvamux_10 小时前
10款模型写种草笔记:可发布性、返工来源与成本数据缺口复盘
java·数据库·笔记
步行cgn11 小时前
StringHttpMessageConverter 详解:Spring MVC 中字符串读写的默认转换器
java·spring·mvc
摇滚侠11 小时前
《On Java 中文版 基础卷》阅读笔记 实现隐藏 11
java·笔记·python
小蒜学长11 小时前
基于Spring Boot+Vue3的在线医疗咨询系统的设计与实现(代码+数据库+LW)
java·spring boot·后端·在线问诊·在线医疗咨询系统
Deng桑11 小时前
SpringAI写第一个Agent-把工单循环跑起来
java·agent·工具调用·spring ai
跨境猫小妹12 小时前
跨境电商订单导出CSV用Excel打开后订单号变成科学计数法如何定位并修复
excel·跨境电商·营销策略
步行cgn13 小时前
@ResponseBody 详解:Spring MVC 中把返回值直接写入响应体
java·spring·mvc
jason成都14 小时前
RTKLIB 的 Java 移植版来了:rtklib-java v3.3.0 功能全景
java·gnss·rtklib·rtklib_java