From b15dc1a4aafb7458b130c48670a27fcc0731b097 Mon Sep 17 00:00:00 2001 From: "han\\hanst" Date: Thu, 4 Jun 2026 10:40:05 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A6=82=E6=9E=9C=E8=AE=BE=E5=A4=87=E7=9B=AE?= =?UTF-8?q?=E5=BD=95=E9=87=8C=E5=B7=B2=E5=AD=98=E5=9C=A8=E5=90=8C=E5=90=8D?= =?UTF-8?q?=E6=96=87=E4=BB=B6=EF=BC=8C=E5=88=99=E6=96=B0=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E4=BF=9D=E5=AD=98=E4=B8=BA=20=E5=8E=9F=E5=90=8D=5FyyyyMMdd=5FH?= =?UTF-8?q?Hmmss.=E6=89=A9=E5=B1=95=E5=90=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/ClientFileCollectorServiceImpl.java | 38 +++++++++++++++++-- 1 file changed, 34 insertions(+), 4 deletions(-) diff --git a/cclqms-java/src/main/java/com/gaotao/modules/reader/service/impl/ClientFileCollectorServiceImpl.java b/cclqms-java/src/main/java/com/gaotao/modules/reader/service/impl/ClientFileCollectorServiceImpl.java index 1f513f6..6586a45 100644 --- a/cclqms-java/src/main/java/com/gaotao/modules/reader/service/impl/ClientFileCollectorServiceImpl.java +++ b/cclqms-java/src/main/java/com/gaotao/modules/reader/service/impl/ClientFileCollectorServiceImpl.java @@ -12,7 +12,8 @@ import java.io.InputStream; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; -import java.nio.file.StandardCopyOption; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; import java.util.UUID; @Service @@ -23,6 +24,7 @@ public class ClientFileCollectorServiceImpl implements ClientFileCollectorServic * 服务端统一落盘目录:D:\qms-dataCollection */ private static final Path SERVER_ROOT_PATH = Paths.get("D:\\qms-dataCollection"); + private static final DateTimeFormatter FILE_TIME_SUFFIX_FORMATTER = DateTimeFormatter.ofPattern("yyyyMMdd_HHmmss"); @Override public CollectorUploadResultData uploadFile(MultipartFile file, String site, String buNo, String equipmentNo) { @@ -41,11 +43,12 @@ public class ClientFileCollectorServiceImpl implements ClientFileCollectorServic String originalFileName = StringUtils.defaultIfBlank(file.getOriginalFilename(), UUID.randomUUID() + ".dat"); String safeFileName = this.toSafeFileName(originalFileName); Path equipmentFolderPath = SERVER_ROOT_PATH.resolve(safeEquipmentNo); - Path targetPath = equipmentFolderPath.resolve(safeFileName); + Path targetPath; try { Files.createDirectories(equipmentFolderPath); + targetPath = this.resolveTargetPathWithTimeSuffix(equipmentFolderPath, safeFileName); try (InputStream inputStream = file.getInputStream()) { - Files.copy(inputStream, targetPath, StandardCopyOption.REPLACE_EXISTING); + Files.copy(inputStream, targetPath); } log.info("客户端文件上传成功: site={}, buNo={}, equipmentNo={}, path={}", site, buNo, equipmentNo, targetPath); @@ -57,12 +60,39 @@ public class ClientFileCollectorServiceImpl implements ClientFileCollectorServic result.setSite(site); result.setBuNo(buNo); result.setEquipmentNo(equipmentNo); - result.setSavedFileName(safeFileName); + result.setSavedFileName(targetPath.getFileName().toString()); result.setSavedFullPath(targetPath.toString()); result.setFileSize(file.getSize()); return result; } + /** + * 目标文件已存在时,为新文件自动追加时间后缀,避免覆盖历史文件。 + */ + private Path resolveTargetPathWithTimeSuffix(Path folderPath, String safeFileName) { + Path originalTargetPath = folderPath.resolve(safeFileName); + if (!Files.exists(originalTargetPath)) { + return originalTargetPath; + } + + String baseName = safeFileName; + String extension = ""; + int dotIndex = safeFileName.lastIndexOf('.'); + if (dotIndex > 0 && dotIndex < safeFileName.length() - 1) { + baseName = safeFileName.substring(0, dotIndex); + extension = safeFileName.substring(dotIndex); + } + + String timeSuffix = LocalDateTime.now().format(FILE_TIME_SUFFIX_FORMATTER); + Path targetPath = folderPath.resolve(baseName + "_" + timeSuffix + extension); + int index = 1; + while (Files.exists(targetPath)) { + targetPath = folderPath.resolve(baseName + "_" + timeSuffix + "_" + index + extension); + index++; + } + return targetPath; + } + private String toSafeFileName(String fileName) { String safeFileName = fileName.replaceAll("[\\\\/:*?\"<>|]", "_").trim(); if (StringUtils.isBlank(safeFileName)) {