快捷搜索:  汽车  科技

springboot上传多附件如何保存(springbootjxls根据Excel模板)

springboot上传多附件如何保存(springbootjxls根据Excel模板)

项目结构

springboot上传多附件如何保存(springbootjxls根据Excel模板)(1)

pom.xml

<!--jxls导出依赖jar包--> <dependency> <groupId>net.sf.jxls</groupId> <artifactId>jxls-core</artifactId> <version>1.0.6</version> <scope>compile</scope> </dependency>

学生信息表模板:

springboot上传多附件如何保存(springbootjxls根据Excel模板)(2)

ExcelUtiles

package cn.bdqn.utils; import net.sf.jxls.transformer.XLSTransformer; import org.apache.poi.ss.usermodel.workbook; import org.springframework.util.ResourceUtils; import javax.servlet.http.HttpServletResponse; import java.io.*; import java.util.Map; /** * @ProjectName: Student * @Author: huat * @Date: 2020/5/7 8:53 * @Version: 1.0 */ public class ExcelUtiles { /** * 输出表格 * @param map 表格中数据 * @param response 响应 * @param excelName 表格名称 * @param excelPath 表格模板保存的路径 */ public static void outExcel(Map<String Object> map HttpServletResponse response String excelName String excelPath){ File file=null; try { file= ResourceUtils.getFile(excelPath); } catch (FileNotFoundException e) { e.printStackTrace(); } //配置下载路径 String path = "/download/"; createDir(new File(path)); //根据模板生成新的excel File excelFile = createNewFile(map file path excelName); //浏览器端下载文件 try { downloadFile(response excelFile excelName); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } //删除服务器生成文件 deleteFile(excelFile); } /** * 根据excel模板生成新的excel * @param beans 表格中的数据 * @param file 文件 * @param path 生成文件的位置 * @param excelName 文件名称 * @return */ private static File createNewFile(Map<String Object> beans File file String path String excelName) { XLSTransformer transformer = new XLSTransformer(); File newFile = new File(path excelName ".xlsx"); try (InputStream in = new BufferedInputStream(new FileInputStream(file)); OutputStream out = new FileOutputStream(newFile)) { Workbook workbook = transformer.transformXLS(in beans); workbook.write(out); out.flush(); return newFile; } catch (Exception e) { System.out.println(e.getMessage()); } return newFile; } /** * 将服务器新生成的excel从浏览器下载 * @param response 响应 * @param excelFile 表格文件 * @param excelName 表格名称 * @throws UnsupportedEncodingException */ private static void downloadFile(HttpServletResponse response File excelFile String excelName) throws UnsupportedEncodingException { /* 设置文件头:最后一个参数是设置下载文件名 */ response.setHeader("Content-type" "application/vnd.ms-excel"); // 解决导出文件名中文乱码 response.setCharacterEncoding("UTF-8"); response.setHeader("Content-Disposition" "attachment;filename=" new String(excelName.getBytes("UTF-8") "ISO-8859-1") ".xlsx"); try ( InputStream ins = new FileInputStream(excelFile); OutputStream os = response.getOutputStream() ) { byte[] b = new byte[1024]; int len; while ((len = ins.read(b)) > 0) { os.write(b 0 len); } } catch (IOException ioe) { ioe.printStackTrace(); } } /** * 浏览器下载完成之后删除服务器生成的文件 * 也可以设置定时任务去删除服务器文件 * * @param excelFile */ private static void deleteFile(File excelFile) { excelFile.delete(); } //如果目录不存在创建目录 存在则不创建 private static void createDir(File file) { if (!file.exists()) { file.mkdirs(); } } }

Controller

@RequestMapping("downExcel") public void downExecl(HttpServletResponse response){ Map<String Object> map=new HashMap<String Object>(); map.put("name" "学生信息表"); //获取学生信息 map.put("studentList" studentService.getStudent()); //"classpath:static/excel/学生表格.xlsx" 表格模板保存路径,classpath:代表resources路径 ExcelUtiles.outExcel(map response "学生信息表" "classpath:static/excel/学生表格.xlsx"); }

原文:https://my.oschina.net/u/3535099/blog/4268971

作者:冥焱

猜您喜欢: