因为后台文件上传用到了“MultipartHttpServletRequest”,所以需要配置一下项目,总共配置两处。
1. 需要在spring-mvc,的beans中添加,下面这个
104857600
10240
UTF-8
2. 然后添加一个pom依赖,不是maven项目的可以自己去下载一个jar包。
commons-fileupload
commons-fileupload
1.3.1
//EXCEl上传
@RequestMapping("/upload.do")
public void uploadExcel(MultipartHttpServletRequest request) throws Exception{
//获取MultipartHttpServletRequest上传过来的文件。
MultipartFile file=request.getFile("productFile");
//获取上传的文件名称。
String fileName=file.getOriginalFilename();
//根据名称获取文件后缀
String suffix=fileName.substring(fileName.lastIndexOf("."),fileName.length());//通过文件名获取文件格式
//新建一个excel工作簿
Workbook wk=null;
//根据文件后缀判断excel的版本, 并将传过来的文件塞到excel工作簿。03以下版本格式为.xsl, 07以上版本用.xlsx
if(suffix.equals(".xls")) {
wk=new HSSFWorkbook(file.getInputStream());
}else if(suffix.equals(".xlsx")) {
wk=new XSSFWorkbook(file.getInputStream());
}
//将excel工作簿转换为一个list集合,泛型为Project,也就是自己要插入数据库的对象
List products=poiService.readExcelData(wk);
//将list插入数据库当中
for(Product p:products){
System.out.println("待插入的数据: {} "+p);
int a=userDao.insertSelective(p);
}
}
其中需要主要的是readExcelData(wk),细节如下:
public static List readExcelData(Workbook wb) throws Exception{
Product product=null;
List products=new ArrayList();
Row row=null;
//获取有多少sheet页
int numSheet=wb.getNumberOfSheets();
if (numSheet>0) {
for(int i=0;i0) {
for(int j=1;j<=numRow;j++){
//TODO:跳过excel sheet表格头部
row=sheet.getRow(j);
product=new Product();
String name=ExcelUtil.manageCell(row.getCell(1), null);
String unit=ExcelUtil.manageCell(row.getCell(2), null);
Double price=Double.valueOf(ExcelUtil.manageCell(row.getCell(3), null));
String stock=ExcelUtil.manageCell(row.getCell(4), null);
String value=ExcelUtil.manageCell(row.getCell(5), "yyyy-MM-dd");
String remark=ExcelUtil.manageCell(row.getCell(6), null);
product.setName(name);
product.setUnit(unit);
product.setPrice(price);
product.setStock(Double.valueOf(stock));
System.out.println("value:"+value);
product.setPurchaseDate(DateUtil.strToDate(value, "yyyy-MM-dd"));
product.setRemark(remark);
products.add(product);
}
}
}
}
return products;
}
dao层如下:
int insertSelective(Product record);
Mapper层如下:
insert into product
id,
name,
unit,
price,
stock,
remark,
purchase_date,
is_delete,
#{id,jdbcType=INTEGER},
#{name,jdbcType=VARCHAR},
#{unit,jdbcType=VARCHAR},
#{price,jdbcType=DOUBLE},
#{stock,jdbcType=INTEGER},
#{remark,jdbcType=VARCHAR},
#{purchaseDate,jdbcType=DATE},
#{isDelete,jdbcType=INTEGER},