问题描述因为工作需要导出Excel文件,使用的技术是EasyPOI,EasyPOI是一个非常好的导出文件的工具,官网提供了非常详细的文档,在项目中使用了EasyPOI的模板导出功能。在官方提供的示例代码中,模板的路径是本地的。我用的时候也是把Excel模板文件放在本地,因为之前需要导出的地方不多,而且模板文件也是本地的。没什么大问题,但是现在由于需求的变化,会有大量的模板需要导出,如果放在本地的话,项目容量会增加。现在想把导出的模板保存到远程FTP服务中,EasyPOI读取FTP中的模板文件生成Excel文件。解决步骤1.找到解决方案。在网上找了很多相关资料,但是在官网上没有找到解决方法。不小心翻到了一篇文章。文中提到了一句话,说EasyPOI读取模板文件,只支持读取本地模板文件,也就是说,我只需要将FTP中的模板文件下载到本地指定的路径下,就可以读取模板文件了。2、创建测试项目创建一个SpringBoot项目,在POM文件中引入需要的Jar包,如下cn.hutoolhutool-all5.7.5cn.afterturneasypoi-spring-boot-starter4.3.0commons-netcommons-net3.63.添加一些配置文件ftp:host:192.168.2.2#IPport:21#portusername:root#usernamepassword:123456#passwordmode:Passive#ftpmoderemotePath:/root/export/#ftp模板路径localPath:/Users/simonxue/Developer/Temp/#本地模板路径template:employee:employee.xlsx#模板文件3.创建一个FTP下载方法,返回地址模板的全路径名,如下图@Value("${ftp.host}")privateStringhost;@Value("${ftp.port}")privateIntegerport;@Value("${ftp.username}")privateStringusername;@Value("${ftp.password}")privateStringpassword;@Value("${ftp.mode}")privateStringmode;@Value("${ftp.remotePath}")privateStringremotePath;@Value("${ftp.localPath}")privateStringlocalPath;/***将FTP中的文件复制到本地*@paramfileNameftp中的文件名*@return*/@SneakyThrowspublicStringlocalPathName(StringfileName){Ftpftp=newFtp(host,port,username,password,Charset.defaultCharset());ftp.setMode(FtpMode.Passive.name().equals(mode)?FtpMode.Passive:FtpMode.Active);StringlocalName=localPath+fileName;ftp.download(remotePath,fileName,FileUtil.file(localName));ftp.close();returnlocalName;}4.根据需要导出的地方模板,使用上面的方法,如下@SneakyThrows@OverridepublicvoidtemplateTest(HttpServletResponseresponse){StringlocalPathName=ftpUtil.localPathName(employeeTemplateName);response.setCharacterEncoding("utf-8");response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");response.setHeader("Content-Disposition","attachment;filename="+IdUtil.getSnowflake(0,0).nextIdStr()+".xlsx");MapresultMap=newHashMap<>();ListemployeeList=newArrayList<>();Employeeemployee=newEmployee();employee.setJobNumber("0001");employee.setUsername("小码农薛尧");employee.setPhone("1234567901");employee.setEmail("xueyao.me@gmail.com");employeeList.add(employee);List