导包:

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文件上传下载(示例代码)...相关推荐

  1. 在express项目中使用formidable multiparty实现文件上传

    安装 formidable,multiparty 模块 npm install formidable,multiparty –save -d 表单上传 <form id="addFor ...

  2. 基于华为云obs实现文件上传下载(技术栈mysql+springboot+Maven+jsp+java)的技术分享

    基于华为云obs实现文件上传下载(技术栈mysql+springboot+jsp+java)的技术分享 obs实现文件上传下载 前言 一.OBS是什么? 二.使用步骤 1.1 前期准备 2 工具的内容 ...

  3. maven 文件上传下载_使用Maven将文件上传和下载到S3

    maven 文件上传下载 多年来,我已经看到许多团队以许多不同的方式使用Maven. Maven可用于许多ci / cd任务,而无需使用额外的管道代码,或者可用于在运行某些测试之前准备开发环境. 通常 ...

  4. servlet文件上传下载_Servlet上传文件和下载文件示例

    servlet文件上传下载 Java Web应用程序中的文件上载和下载以及常见任务. 由于最近我写了很多有关Java servlet的文章 ,因此我想提供一个使用servlet上传和下载文件的示例示例 ...

  5. 通过ajaxFileUpload异步请求上传文件(ajaxFileUpload+servlet实现文件上传下载)

    1.最终效果 实现选择图片(此处以图片为例,支持所有类型文件的上传),选择之后将选择的图片在页面中显示出来,点击上传,可以将文件上传到指定的地址中,上传成功后在当前页面自动显示下载标签. 源码下载地址 ...

  6. 利用mysql实现上传和下载_文件上传表单 上传文件的细节 文件上传下载和数据库结合...

    1 文件上传表单 1)上传文件的本质是文本复制的过程 2)技术层面,在Java中一定会用到IO操作,主要以二进制方式读写 3)传统方式下,对于上传文件字段不同的浏览器有着不同的解析方式,例如: IE6 ...

  7. 文件上传下载—servlet API实现

    servlet API实现文件上传下载需要的jar包: UploadServlet.java package com.ymw.web.servlet;import java.io.File; impo ...

  8. 项目_功能模块_基于Spring Boot的文件上传下载功能的设计与实现

    文章目录 基于Spring Boot的文件上传下载功能模块的设计与实现 1.前言 2.技术栈 3.关键源码 4.实现效果 4.1.登录 4.2.文件列表 4.3.上传文件测试 4.3.1.测试图片 4 ...

  9. VUE 项目大文件上传下载解决方案

    之前仿造uploadify写了一个HTML5版的文件上传插件,没看过的朋友可以点此先看一下~得到了不少朋友的好评,我自己也用在了项目中,不论是用户头像上传,还是各种媒体文件的上传,以及各种个性的业务需 ...

最新文章

  1. 互联网如何“升级”制造业?《“人工智能+制造”产业发展研究报告》发布
  2. python装饰器简单理解
  3. hicharts Linux服务器导出,中文字体问题
  4. pytorch:ResNet50做新冠肺炎CT照片是否确诊分类
  5. mac chrome 打包扩展程序
  6. 软件工程--瀑布模型
  7. Android 上哪个更好:除以 2 还是位移 1?
  8. 用python开发的运维管理系统下载_GitHub - jiegangwu/OPMS_v3: 基于 Python 3.5 + Django 2.0 开发的运维管理系统...
  9. socket编程遇到的bug记录
  10. 类Shiro权限校验框架的设计和实现
  11. 3次样条曲线差值函数c++实现
  12. 无痛学习ISAC(二)
  13. 无需Apple ID和密码即可将iPad恢复出厂设置的几种方法
  14. Android 应用进程启动流程
  15. python中encode函数_Python中encode()方法有哪些功能?
  16. 供应链金融三种模式介绍及对比
  17. JS设置浏览器缩放比例
  18. 程序员因加班错失77万年会大奖,该不该补发?-千氪
  19. 如何进阶TypeScript功底?一文带你理解TS中各种高级语法
  20. java sdk完整单机下载地址_Java SDK下载方法

热门文章

  1. 关于我想写个脚本,最后却搞了个桌面宠物这件事(二)
  2. Oracle EBS AP预付款发票核销可用金额查询SQL
  3. 做电商网站的主键策略
  4. 零一裂变:如何精细化运营私域流量,单个用户月均消费提升7倍
  5. 软件设计:“度”、“裁剪”与“变通”
  6. 石英晶振的频率稳定性和负载电容有什么关系?
  7. 洲思zCloud公有云版发布
  8. package有什么作用
  9. Google的两种广告推广方式
  10. 一个移动端开发者,对未来的思考