From 9fe06a6b8962379f716dec41bb5314adaf55b75b Mon Sep 17 00:00:00 2001 From: maochaoying <925670706@qq.com> Date: Wed, 28 Jun 2023 14:51:58 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AF=B9excel=E7=89=88=E5=BC=8F=E8=BF=9B?= =?UTF-8?q?=E8=A1=8C=E7=B2=97=E7=95=A5=E6=A0=A1=E9=AA=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 15 ++ .../nuclear/controller/UploadController.java | 27 +++- .../com/iflytop/nuclear/service/UploadService.java | 16 ++ .../nuclear/service/impl/UploadServiceImpl.java | 38 +++++ .../java/com/iflytop/nuclear/utils/ExcelUtils.java | 162 +++++++++++++++++++++ src/main/resources/public/a.xlsx | Bin 0 -> 18053 bytes uploadfiles/xlsx/20230628/堆芯模版.xlsx | Bin 0 -> 12768 bytes 7 files changed, 251 insertions(+), 7 deletions(-) create mode 100644 src/main/java/com/iflytop/nuclear/service/UploadService.java create mode 100644 src/main/java/com/iflytop/nuclear/service/impl/UploadServiceImpl.java create mode 100644 src/main/java/com/iflytop/nuclear/utils/ExcelUtils.java create mode 100644 src/main/resources/public/a.xlsx create mode 100644 uploadfiles/xlsx/20230628/堆芯模版.xlsx diff --git a/pom.xml b/pom.xml index a57869d..a90ec89 100644 --- a/pom.xml +++ b/pom.xml @@ -37,6 +37,21 @@ 2.0.26 + org.apache.poi + poi + 4.1.2 + + + org.apache.poi + poi-ooxml + 4.1.2 + + + org.apache.poi + poi-ooxml-schemas + 4.1.2 + + io.jsonwebtoken jjwt 0.9.0 diff --git a/src/main/java/com/iflytop/nuclear/controller/UploadController.java b/src/main/java/com/iflytop/nuclear/controller/UploadController.java index 4cf46bd..efa36bc 100644 --- a/src/main/java/com/iflytop/nuclear/controller/UploadController.java +++ b/src/main/java/com/iflytop/nuclear/controller/UploadController.java @@ -1,6 +1,10 @@ package com.iflytop.nuclear.controller; +import com.alibaba.fastjson2.JSONObject; +import com.iflytop.nuclear.service.UploadService; +import com.iflytop.nuclear.utils.ResponseData; import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.CrossOrigin; import org.springframework.web.bind.annotation.PostMapping; @@ -24,13 +28,21 @@ import java.util.Set; @RestController @CrossOrigin public class UploadController { + + @Autowired + UploadService uploadService; + @PostMapping("/upload") - public String uploadToLocal(MultipartFile file){ + public ResponseData uploadToLocal(MultipartFile file) throws IOException { + // 对当前文件中内容格式进行校验 + boolean isValid = uploadService.verifyFileFormat(file); + if (!isValid) { + return ResponseData.fail("上传文件内容未按照标准版式排版"); + } // 获取文件原本的名字 String originName = file.getOriginalFilename(); // 判断文件是否是pdf文件 Set set = new HashSet<>(); - set.add(".xls"); set.add(".xlsx"); // 取出文件的后缀 int count = 0; @@ -43,10 +55,9 @@ public class UploadController { String endName = originName.substring(count); //取出文件类型 String fileType = originName.substring(count + 1); //文件类型 if(!set.contains(endName)){ - return new String("上传的文件类型错误,只能上传xls,xlsx类型的文件"); + return ResponseData.fail("上传的文件类型错误,只能上传xlsx类型的文件"); } - // 创建保存路径 - //日期格式 + // 创建保存路径 后期使用保存在数据库中的id进行取名 SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd"); String format = sdf.format(new Date()); String savePath = System.getProperty("user.dir") + "/" + "uploadfiles" + "/" + fileType + "/" + format; @@ -60,9 +71,11 @@ public class UploadController { try { file.transferTo(new File(folder,saveName)); String filePath = savePath + "\\" + saveName; - return new String("文件路径为:" + filePath); + JSONObject res = new JSONObject(); + res.put("path", filePath); + return ResponseData.success(res); } catch (IOException e){ - return new String(e.getMessage()); + return ResponseData.fail(e.getMessage()); } } } diff --git a/src/main/java/com/iflytop/nuclear/service/UploadService.java b/src/main/java/com/iflytop/nuclear/service/UploadService.java new file mode 100644 index 0000000..90e79e9 --- /dev/null +++ b/src/main/java/com/iflytop/nuclear/service/UploadService.java @@ -0,0 +1,16 @@ +package com.iflytop.nuclear.service; + +import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.multipart.MultipartFile; + +import java.io.IOException; + +/** + * @author cool + * @date 2023/6/28 14:20 + */ +@Transactional +public interface UploadService { + boolean verifyFileFormat(MultipartFile file) throws IOException; + +} diff --git a/src/main/java/com/iflytop/nuclear/service/impl/UploadServiceImpl.java b/src/main/java/com/iflytop/nuclear/service/impl/UploadServiceImpl.java new file mode 100644 index 0000000..fbffbcc --- /dev/null +++ b/src/main/java/com/iflytop/nuclear/service/impl/UploadServiceImpl.java @@ -0,0 +1,38 @@ +package com.iflytop.nuclear.service.impl; + +import com.iflytop.nuclear.service.UploadService; +import org.apache.poi.ss.usermodel.Sheet; +import org.apache.poi.ss.usermodel.Workbook; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; +import org.springframework.stereotype.Service; +import org.springframework.web.multipart.MultipartFile; + +import java.io.IOException; +import java.io.InputStream; + +/** + * @author cool + * @date 2023/6/28 14:21 + */ +@Service +public class UploadServiceImpl implements UploadService { + @Override + public boolean verifyFileFormat(MultipartFile file) throws IOException { + InputStream inputStream = file.getInputStream(); + Workbook wb = new XSSFWorkbook(inputStream); + //默认会跳过第一行标题 + // 得到第一个shell + Sheet sheet = wb.getSheetAt(0); + // 得到Excel的行数 + int physicalNumberOfRows = sheet.getPhysicalNumberOfRows(); + int totalCells = 0; + // 得到Excel的列数(前提是有行数) + if (physicalNumberOfRows > 1 && sheet.getRow(1) != null) { + totalCells = sheet.getRow(1).getPhysicalNumberOfCells(); + } + if (physicalNumberOfRows == 41 && totalCells == 14) { + return true; + } + return false; + } +} diff --git a/src/main/java/com/iflytop/nuclear/utils/ExcelUtils.java b/src/main/java/com/iflytop/nuclear/utils/ExcelUtils.java new file mode 100644 index 0000000..b736032 --- /dev/null +++ b/src/main/java/com/iflytop/nuclear/utils/ExcelUtils.java @@ -0,0 +1,162 @@ +// package com.iflytop.nuclear.utils; +// +// import com.iflytop.nuclear.model.NuclearCoreConfig; +// import org.apache.poi.hssf.usermodel.HSSFCell; +// import org.apache.poi.hssf.usermodel.HSSFWorkbook; +// import org.apache.poi.ss.usermodel.*; +// import org.apache.poi.xssf.usermodel.XSSFWorkbook; +// import org.springframework.web.multipart.MultipartFile; +// +// import java.io.IOException; +// import java.io.InputStream; +// import java.text.DecimalFormat; +// import java.time.LocalDate; +// import java.time.LocalDateTime; +// import java.time.format.DateTimeFormatter; +// import java.util.ArrayList; +// import java.util.List; +// +// /** +// * @author xjt +// * @version 1.0 +// */ +// public class ExcelUtils { +// //总行数 +// private static int totalRows = 0; +// //总条数 +// private static int totalCells = 0; +// //错误信息接收器 +// private static String errorMsg; +// +// /** +// * 读EXCEL文件,获取信息集合 +// * @return +// */ +// public static List getExcelInfo(MultipartFile mFile) { +// String fileName = mFile.getOriginalFilename();//获取文件名 +// try { +// if (!validateExcel(fileName)) {// 验证文件名是否合格 +// return null; +// } +// boolean isExcel2003 = true;// 根据文件名判断文件是2003版本还是2007版本 +// if (isExcel2007(fileName)) { +// isExcel2003 = false; +// } +// List userList = createExcel(mFile.getInputStream(), isExcel2003); +// return userList; +// } catch (Exception e) { +// e.printStackTrace(); +// } +// return null; +// } +// /** +// * 根据excel里面的内容读取客户信息 +// * @param is 输入流 +// * @param isExcel2003 excel是2003还是2007版本 +// * @return +// * @throws IOException +// */ +// public static List createExcel(InputStream is, boolean isExcel2003) { +// try{ +// Workbook wb = null; +// if (isExcel2003) {// 当excel是2003时,创建excel2003 +// wb = new HSSFWorkbook(is); +// } else {// 当excel是2007时,创建excel2007 +// wb = new XSSFWorkbook(is); +// } +// List userList = readExcelValue(wb);// 读取Excel里面客户的信息 +// return userList; +// } catch (IOException e) { +// e.printStackTrace(); +// } +// return null; +// } +// /** +// * 读取Excel里面客户的信息 +// * @param wb +// * @return +// */ +// private static List readExcelValue(Workbook wb) { +// //默认会跳过第一行标题 +// // 得到第一个shell +// Sheet sheet = wb.getSheetAt(0); +// // 得到Excel的行数 +// totalRows = sheet.getPhysicalNumberOfRows(); +// // 得到Excel的列数(前提是有行数) +// if (totalRows > 1 && sheet.getRow(0) != null) { +// totalCells = sheet.getRow(0).getPhysicalNumberOfCells(); +// } +// List userList = new ArrayList(); +// // 循环Excel行数 +// for (int r = 1; r < totalRows; r++) { +// Row row = sheet.getRow(r); +// if (row == null){ +// continue; +// } +// BuiPatientInfo user = new BuiPatientInfo(); +// // 循环Excel的列 +// for (int c = 0; c < totalCells-1; c++) { +// Cell cell = row.getCell(c); +// if (null != cell) { +// if (c == 0) { //第一列 +// //如果是纯数字,将单元格类型转为String +// if(cell.getCellTypeEnum() == CellType.NUMERIC){ +// cell.setCellType(CellType.STRING); +// } +// user.setPatientName(cell.getStringCellValue());//将单元格数据赋值给user +// } +// else if (c == 1){ +// if(cell.getCellTypeEnum() == CellType.NUMERIC){ +// cell.setCellType(CellType.STRING); +// } +// user.setPatientIdentity(cell.getStringCellValue()); +// } +// else if (c == 2){ +// if(cell.getCellTypeEnum() == CellType.NUMERIC){ +// cell.setCellType(CellType.STRING); +// } +// String stringCellValue = cell.getStringCellValue(); +// user.setHealingId(stringCellValue); +// } +// else if (c == 3){ +// if(cell.getCellTypeEnum() == CellType.NUMERIC){ +// cell.setCellType(CellType.STRING); +// } +// user.setElseInfo(String.valueOf(cell.getStringCellValue())); +// } +// } +// } +// //将excel解析出来的数据赋值给对象添加到list中 +// user.setUpdateTime(LocalDateTime.now()); +// user.setPatientBirthdate(IdentityUtil.getPatientBirth(user.getPatientIdentity())); //拿到身份中好通过已经写好的通过身份证信息获取出生年月工具类 +// user.setPatientSex(IdentityUtil.getPatientSex(user.getPatientIdentity())); //通过省份证号,获取男女信息工具类 +// user.setPatientState(1); //当前实体类字段是固定的,不是excel数据中的。每个对象都可以再遍历完后增加固定属性值 +// user.setCreateId(2L); +// user.setCreateTime(LocalDateTime.now()); +// // 添加到list +// userList.add(user); +// } +// return userList; +// } +// /** +// * 验证EXCEL文件 +// * +// * @param filePath +// * @return +// */ +// public static boolean validateExcel(String filePath) { +// if (filePath == null || !(isExcel2003(filePath) || isExcel2007(filePath))) { +// errorMsg = "文件名不是excel格式"; +// return false; +// } +// return true; +// } +// // @描述:是否是2003的excel,返回true是2003 +// public static boolean isExcel2003(String filePath) { +// return filePath.matches("^.+\\.(?i)(xls)$"); +// } +// //@描述:是否是2007的excel,返回true是2007 +// public static boolean isExcel2007(String filePath) { +// return filePath.matches("^.+\\.(?i)(xlsx)$"); +// } +// } diff --git a/src/main/resources/public/a.xlsx b/src/main/resources/public/a.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..200b98c853a90b5faf7a02036a65e3be82954d0a GIT binary patch literal 18053 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 literal 0 HcmV?d00001 diff --git a/uploadfiles/xlsx/20230628/堆芯模版.xlsx b/uploadfiles/xlsx/20230628/堆芯模版.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..3c6cbc0b99eaa36761179ed09e90925b01e8c27d GIT binary patch literal 12768 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 I=w9{yAA~fyYXATM literal 0 HcmV?d00001