diff --git a/laws-modules/src/main/java/com/jero/modules/laws/common/service/impl/LawsCommonServiceImpl.java b/laws-modules/src/main/java/com/jero/modules/laws/common/service/impl/LawsCommonServiceImpl.java index b3dadc02..c2ea60a2 100644 --- a/laws-modules/src/main/java/com/jero/modules/laws/common/service/impl/LawsCommonServiceImpl.java +++ b/laws-modules/src/main/java/com/jero/modules/laws/common/service/impl/LawsCommonServiceImpl.java @@ -61,6 +61,7 @@ import org.apache.poi.xssf.usermodel.XSSFSheet; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.apache.shiro.SecurityUtils; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.multipart.MultipartFile; @@ -69,6 +70,7 @@ import javax.annotation.Resource; import javax.servlet.http.HttpServletResponse; import java.io.*; import java.net.URLEncoder; +import java.nio.charset.Charset; import java.nio.file.Files; import java.nio.file.Path; import java.text.SimpleDateFormat; @@ -76,6 +78,7 @@ import java.time.LocalDate; import java.util.*; import java.util.stream.Collectors; import java.util.zip.ZipEntry; +import java.util.zip.ZipFile; import java.util.zip.ZipOutputStream; /** @@ -87,6 +90,9 @@ import java.util.zip.ZipOutputStream; @Component public class LawsCommonServiceImpl implements ILawsCommonService { + @Value(value = "${jero.path.upload}") + private String uploadPath; + @Autowired private LawsCommonMapper lawsCommonMapper; @Autowired @@ -1422,18 +1428,10 @@ public class LawsCommonServiceImpl implements ILawsCommonService { } FileUtils.copyInputStreamToFile(file.getInputStream(), new File(path + File.separator + file.getOriginalFilename())); // 解压缩 - String zipEntryName = FileUnZip.unZipFiles(path + File.separator + file.getOriginalFilename(), String.valueOf(path)); + FileUnZip.unZipFiles(path + File.separator + file.getOriginalFilename(), String.valueOf(path)); - // 判断压缩包下是否只有一个文件夹 - File fileTemp = new File(path.toUri()); - int length = Objects.requireNonNull(fileTemp.listFiles()).length; - if (length > 2) { - FileUnZip.deleteDir(saveDirectory); - throw new JeroBootException(MessageUtils.getMessage(ResultCommon.FOLDER_ONLY_ONE)); - } - File fileNew = new File(zipEntryName); List fileList = new ArrayList<>(); - for (File file1 : Objects.requireNonNull(fileNew.listFiles())) { + for (File file1 : Objects.requireNonNull(saveDirectory.listFiles())) { if (file1.getName().contains(".xls") || file1.getName().contains(".xlsx")) { fileList.add(file1); } @@ -1445,7 +1443,7 @@ public class LawsCommonServiceImpl implements ILawsCommonService { FileUnZip.deleteDir(saveDirectory); throw new JeroBootException(MessageUtils.getMessage(ResultCommon.IMPORT_TEMPLATE_ERROR)); } - List excelfilelist = FileUnZip.readImpExcelFile(zipEntryName); + List excelfilelist = FileUnZip.readImpExcelFile(saveDirectory.getPath()); System.gc(); if (excelfilelist.size() != 1) { FileUnZip.deleteDir(saveDirectory); @@ -1475,6 +1473,9 @@ public class LawsCommonServiceImpl implements ILawsCommonService { } // 数据内容格式校验 Map fileMap = new HashMap<>(); + // 遍历saveDirectory下的所有文件 + populateFileMap(saveDirectory, saveDirectory, fileMap); + try (Workbook workbook = new XSSFWorkbook(Files.newInputStream(excelfilelist.get(0).toPath()))) { // 检测是否是空Excel Sheet sheet = workbook.getSheetAt(0); @@ -1517,6 +1518,23 @@ public class LawsCommonServiceImpl implements ILawsCommonService { return errMsgList; } + private static void populateFileMap(File rootDir, File currentDir, Map fileMap) { + File[] files = currentDir.listFiles(); // 列出所有文件和子目录 + if (files != null) { + for (File file : files) { + // 对于每个文件/子目录,获取相对于rootDir的相对路径 + Path relativePath = rootDir.toPath().relativize(file.toPath()); + if (file.isDirectory()) { + // 如果是目录,递归调用 + populateFileMap(rootDir, file, fileMap); + } else { + // 否则,将它加入到map中 + fileMap.put(relativePath.toString().replace("\\", "/"), file); + } + } + } + } + /** * 设置导入模板的第三行提示内容 * diff --git a/laws-modules/src/main/java/com/jero/modules/laws/common/util/ImportUtil.java b/laws-modules/src/main/java/com/jero/modules/laws/common/util/ImportUtil.java index 4b48ccbc..61f8312a 100644 --- a/laws-modules/src/main/java/com/jero/modules/laws/common/util/ImportUtil.java +++ b/laws-modules/src/main/java/com/jero/modules/laws/common/util/ImportUtil.java @@ -687,7 +687,13 @@ public class ImportUtil { if (!(lowerCasePath.endsWith(".pdf") || lowerCasePath.endsWith(".doc") || lowerCasePath.endsWith(".docx") || lowerCasePath.endsWith(".xls") || lowerCasePath.endsWith(".xlsx") - || lowerCasePath.endsWith(".png") || lowerCasePath.endsWith(".jpg"))) { + || lowerCasePath.endsWith(".ppt") || lowerCasePath.endsWith(".pptx") + || lowerCasePath.endsWith(".rar") || lowerCasePath.endsWith(".zip") + || lowerCasePath.endsWith(".jpg") || lowerCasePath.endsWith(".jpeg") + || lowerCasePath.endsWith(".png") || lowerCasePath.endsWith(".avi") + || lowerCasePath.endsWith(".wmv") || lowerCasePath.endsWith(".mov") + || lowerCasePath.endsWith(".rm") || lowerCasePath.endsWith(".mp4") + || lowerCasePath.endsWith(".cad"))) { return false; } }