hibernate+servlet+mysql 实现easypoi_在Maven项目中使用easypoi完成Excel文件上传下载(示例代码)...
导包:
1
2
3 cn.afterturn
4 easypoi-base
5 3.2.0
6
7
8 cn.afterturn
9 easypoi-web
10 3.2.0
11
12
13 cn.afterturn
14 easypoi-annotation
15 3.2.0
16
一:文件下载
1:前台准备导出按钮
1 数据导出
1.2 准备好view(beanName的视图解析器)
在applicationContext-mvc.xml
1.3:在DownloadController完成后台导出
/*** 导出就是下载(下载就是把一个流 从服务器端 -> 客户端)
*
* EasypoiSingleExcelView : 注解导出的view*/@RequestMapping("/export")publicString export(EmployeeQuery query,ModelMap map, HttpServletRequest request){//根据查询条件拿到所有数据
List list =employeeService.queryAll(query);//导出的属性
ExportParams params = new ExportParams("员工数据", "员工表", ExcelType.XSSF);//params.setFreezeCol(2); 冻结//request:获取到真实路径
String realPath = request.getServletContext().getRealPath("");
System.out.println(realPath);
list.forEach(e->{
e.setHeadImage(realPath+e.getHeadImage());
});
map.put(NormalExcelConstants.DATA_LIST, list);//数据集合
map.put(NormalExcelConstants.CLASS, Employee.class);//导出实体
map.put(NormalExcelConstants.PARAMS, params);//参数
map.put(NormalExcelConstants.FILE_NAME, "employee");//文件名称//根据返回的名称去找一个bean对象(在SpringMVC称之为view)///WEB-INF/views/easypoiExcelView//我们直接要文档的的操作是没有成功的 2.文档的情况和我们项目中的情况有一点区别
return NormalExcelConstants.EASYPOI_EXCEL_VIEW;//View名称 "easypoiExcelView"
}
二:上传功能
1:配置上传解析器注意,名字必需叫 multipartResolver
1
2
3 class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
4
5
6
7
8
9
10
2 准备导入页面import.jsp
1
2
3
4
Title
5
6
7
8
9
10 上传只能是post请求11 上传必需设置 : enctype="multipart/form-data"
12 --%>
13
14
15
16 data-options="prompt:‘选择一个文件...‘,buttonText: ‘选择文件‘" />
17 导入
18
19
20
3: 后台ImportController完成导入功能
1 @Controller2 @RequestMapping("/import")3 public class ImportController extendsBaseController {4
5 @Autowired6 privateIDepartmentService departmentService;7
8 @RequestMapping("/index")9 publicString index(){10 return "import";11 }12
13
14
15 /**
16 * 上传的文件使用 MultipartFile类型来接收17 *@paramempFile18 *@return
19 */
20 @RequestMapping("/employeeXlsx")21 public String employeeXlsx(MultipartFile empFile) throwsException {22 //System.out.println(empFile);23 //System.out.println(empFile.getName());//empFile:上传控件的名称24 //System.out.println(empFile.getOriginalFilename());//emp-poi.xlsx:上传文件的名称25 //System.out.println(empFile.getContentType());//mime类型 office excel 200726 //System.out.println(empFile.getSize());//文件大小27 //我们需要拿到上传的文件(输入流)28 //empFile.getInputStream()29 //一.使用EasyPoi获取文件数据30 //1.1 设置参数
31 ImportParams params = newImportParams();32 //params.setTitleRows(1);
33 params.setHeadRows(1);34 //1.2 拿到文件中的数据
35 List list =ExcelImportUtil.importExcel(empFile.getInputStream(),36 Employee.class, params);37 //二.保存员工数据
38 list.forEach(e->{39 //导入时加上一个默认密码
40 e.setPassword("123");41 //通过部门名称拿到部门数据(要有id)
42 Department dept =departmentService.findByName(e.getDepartment().getName());43 //把部门设置到员工数据中
44 e.setDepartment(dept);45 employeeService.save(e);46 } );47
48 return "import";49 }50
51 }
三.导入验证功能
1 导入验证包支持 pom.xml
1
2
3 org.hibernate
4 hibernate-validator
5 5.2.4.Final
6
2 domain中添加验证方法
注解普通验证
1 @Entity2 @Table(name = "employee")3 public class Employee extendsBaseDomain {4
5 @Excel(name = "用户名")6 @NotNull(message = "用户名不能空")7 privateString username;8 privateString password;9 @Excel(name = "年龄")10 @Max(value = 100)11 @Min(value = 18)12 privateInteger age;13 @Excel(name = "邮箱",width = 20)14 @NotNull15 privateString email;16 ...17 }
3:自定义验证
1 实现IExcelVerifyHandler2
3 4
5 /**
6 * 自定义验证(我们会在这里做唯一性的验证)7 */
8 @Component9 public class EmployeeExcelVerifyHandler implements IExcelVerifyHandler{10
11 @Autowired12 privateIEmployeeService employeeService;13 /**
14 *15 * ExcelVerifyHandlerResult16 * suceess :代表验证成功还是失败(如果用户名重复,就代表失败)17 * msg:失败的原因18 */
19 @Override20 publicExcelVerifyHandlerResult verifyHandler(Employee employee) {21
22 ExcelVerifyHandlerResult result = new ExcelVerifyHandlerResult(true);23 //如果根据用户名获取到用户,代表这个用户已经存在
24 Employee tempEmp =employeeService.findByUsername(employee.getUsername());25 if(tempEmp!=null){26 result.setSuccess(false);27 result.setMsg("用户名重复");28 }29
30 returnresult;31 }32 }
把这个类交给Spring管理(千万不要忘了让SpringMvc去扫描到它)
1
2
4实现验证功能
@Controller
@RequestMapping("/import")public class ImportController extendsBaseController {
@AutowiredprivateIEmployeeService employeeService;
@AutowiredprivateIDepartmentService departmentService;
@AutowiredprivateEmployeeExcelVerifyHandler employeeExcelVerifyHandler;
@RequestMapping("/index")publicString index(){return "import";
}
@RequestMapping("/employeeXlsx")public String employeeXlsx(MultipartFile empFile, HttpServletResponse response) throwsException {//一.使用EasyPoi获取文件数据
ImportParams params = newImportParams();
params.setHeadRows(1);
params.setNeedVerfiy(true); //设置验证支持
params.setVerifyHandler(employeeExcelVerifyHandler); //设置一个验证处理器//二.获取excel中的数据,封装成了一个结果对象(有很多东西)
ExcelImportResult result =ExcelImportUtil.importExcelMore(
empFile.getInputStream(),
Employee.class, params);//三.获到正确的数据,并把它们保存到数据库
List list =result.getList();
list.forEach(e->{
e.setPassword("123");
Department dept=departmentService.findByName(e.getDepartment().getName());
e.setDepartment(dept);
employeeService.save(e);
});//四.如果有错误,把错误数据返回到前台(让前台下载一个错误的excel)//4.1判断是否有错误
if(result.isVerfiyFail()){//4.2拿到错误的文件薄
Workbook failWorkbook =result.getFailWorkbook();//把这个文件导出
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); //mime类型
response.setHeader("Content-disposition", "attachment;filename=error.xlsx"); //告诉浏览下载的是一个附件,名字叫做error.xlsx
response.setHeader("Pragma", "No-cache");//设置不要缓存
OutputStream ouputStream =response.getOutputStream();
failWorkbook.write(ouputStream);
ouputStream.flush();
ouputStream.close();
}return "import";
}
}
hibernate+servlet+mysql 实现easypoi_在Maven项目中使用easypoi完成Excel文件上传下载(示例代码)...相关推荐
- 在express项目中使用formidable multiparty实现文件上传
安装 formidable,multiparty 模块 npm install formidable,multiparty –save -d 表单上传 <form id="addFor ...
- 基于华为云obs实现文件上传下载(技术栈mysql+springboot+Maven+jsp+java)的技术分享
基于华为云obs实现文件上传下载(技术栈mysql+springboot+jsp+java)的技术分享 obs实现文件上传下载 前言 一.OBS是什么? 二.使用步骤 1.1 前期准备 2 工具的内容 ...
- maven 文件上传下载_使用Maven将文件上传和下载到S3
maven 文件上传下载 多年来,我已经看到许多团队以许多不同的方式使用Maven. Maven可用于许多ci / cd任务,而无需使用额外的管道代码,或者可用于在运行某些测试之前准备开发环境. 通常 ...
- servlet文件上传下载_Servlet上传文件和下载文件示例
servlet文件上传下载 Java Web应用程序中的文件上载和下载以及常见任务. 由于最近我写了很多有关Java servlet的文章 ,因此我想提供一个使用servlet上传和下载文件的示例示例 ...
- 通过ajaxFileUpload异步请求上传文件(ajaxFileUpload+servlet实现文件上传下载)
1.最终效果 实现选择图片(此处以图片为例,支持所有类型文件的上传),选择之后将选择的图片在页面中显示出来,点击上传,可以将文件上传到指定的地址中,上传成功后在当前页面自动显示下载标签. 源码下载地址 ...
- 利用mysql实现上传和下载_文件上传表单 上传文件的细节 文件上传下载和数据库结合...
1 文件上传表单 1)上传文件的本质是文本复制的过程 2)技术层面,在Java中一定会用到IO操作,主要以二进制方式读写 3)传统方式下,对于上传文件字段不同的浏览器有着不同的解析方式,例如: IE6 ...
- 文件上传下载—servlet API实现
servlet API实现文件上传下载需要的jar包: UploadServlet.java package com.ymw.web.servlet;import java.io.File; impo ...
- 项目_功能模块_基于Spring Boot的文件上传下载功能的设计与实现
文章目录 基于Spring Boot的文件上传下载功能模块的设计与实现 1.前言 2.技术栈 3.关键源码 4.实现效果 4.1.登录 4.2.文件列表 4.3.上传文件测试 4.3.1.测试图片 4 ...
- VUE 项目大文件上传下载解决方案
之前仿造uploadify写了一个HTML5版的文件上传插件,没看过的朋友可以点此先看一下~得到了不少朋友的好评,我自己也用在了项目中,不论是用户头像上传,还是各种媒体文件的上传,以及各种个性的业务需 ...
最新文章
- 互联网如何“升级”制造业?《“人工智能+制造”产业发展研究报告》发布
- python装饰器简单理解
- hicharts Linux服务器导出,中文字体问题
- pytorch:ResNet50做新冠肺炎CT照片是否确诊分类
- mac chrome 打包扩展程序
- 软件工程--瀑布模型
- Android 上哪个更好:除以 2 还是位移 1?
- 用python开发的运维管理系统下载_GitHub - jiegangwu/OPMS_v3: 基于 Python 3.5 + Django 2.0 开发的运维管理系统...
- socket编程遇到的bug记录
- 类Shiro权限校验框架的设计和实现
- 3次样条曲线差值函数c++实现
- 无痛学习ISAC(二)
- 无需Apple ID和密码即可将iPad恢复出厂设置的几种方法
- Android 应用进程启动流程
- python中encode函数_Python中encode()方法有哪些功能?
- 供应链金融三种模式介绍及对比
- JS设置浏览器缩放比例
- 程序员因加班错失77万年会大奖,该不该补发?-千氪
- 如何进阶TypeScript功底?一文带你理解TS中各种高级语法
- java sdk完整单机下载地址_Java SDK下载方法