一:介绍
前端:文件上传原理便是数据的提交,比如Form表单提交、Ajax提交、Ajax提交Form表单等,有多种组合方式,根据需求
不同,使用不同的提交方式,但是原理相同。
后端:接收前端发送的数据(File),解析文件(本文为Excel),解析Excel有多种方式,如poi,还有网上的js-xlsx-master相关js,后者为一个开源项目实例,本文没有使用。
基本原理:读取Excel表,根据版本不同创建不同的Workbook;遍历所有的Sheet;遍历所有row;遍历所有cell;
row为List<Object>,最终re为List<List<Object>>,当然根据需要不同,也可以返回不同类型,比如一个Sheet组成一个List<List<Object>>进行返回,根据需求不同返回不同。
以下测试开发使用Spring mvc框架,使用的包主要有commons-fileupload-1.3.3.jar和org.apache.poi包,网上有说必须要有commons-io包,因为fileupload依赖于他(因为开发为一个模块,这些包原来都有了,并没有测试)。
二、后台函数
Controller函数:该方法接收传递数据(File),调用工具类和服务层方法进行处理,分别为获取List和对数据进行处理,
本处为数据入库。如果读取为部分数据,可以:1.数据库设置默认值2.new Object时构造赋值3.插入时sql中赋值。
/**
* 数据上传导入
* @param file
* @param model
* @param request
* @param res
*/
@RequestMapping("/upload.json")
public ModelMap uploadExcel(ModelMap model,HttpServletRequest request,@RequestParam("excelFile")MultipartFile file){
System.out.println("upload");
int num=0;
try {
List<S>list=FileUtil.doUploadFile(file, request);
num=sListService.doUploadFile(list);
} catch (Exception e) {
e.printStackTrace();
System.out.println("导入失败");
return new ModelMap("info", "导入失败");
}
// model.addAttribute("info", ""+num+"条记录导入成功");
System.out.println(num+"条记录导入成功");
return new ModelMap("info", num+"条记录导入成功");
}
FileUtil工具类:文件保存部分因为FileUtils报错而且不用就注掉了
该类调用工具类对Excel进行处理,获得处理结果List<List<Object>>,将处理结果进行处理,变为List<