From 91d6eb39474bb7ee98c1c1378de86d7f3dccadab Mon Sep 17 00:00:00 2001
From: zj <1772600164@qq.com>
Date: Fri, 07 Nov 2025 19:12:08 +0800
Subject: [PATCH] 1

---
 src/main/java/com/nq/service/impl/FileUploadServiceImpl.java |   90 ++++++++++++++++++++++++++++++++++++++++----
 1 files changed, 81 insertions(+), 9 deletions(-)

diff --git a/src/main/java/com/nq/service/impl/FileUploadServiceImpl.java b/src/main/java/com/nq/service/impl/FileUploadServiceImpl.java
index ae58265..0744da1 100644
--- a/src/main/java/com/nq/service/impl/FileUploadServiceImpl.java
+++ b/src/main/java/com/nq/service/impl/FileUploadServiceImpl.java
@@ -5,6 +5,9 @@
 import com.nq.service.IFileUploadService;
 import java.io.File;
 import java.io.IOException;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.Random;
 import java.util.UUID;
 
 import com.nq.utils.PropertiesUtil;
@@ -25,18 +28,87 @@
 
 
     public ServerResponse upload(MultipartFile file, String path) {
-        String fileName = file.getOriginalFilename();
-        String fileExtentionName = fileName.substring(fileName.lastIndexOf(".") + 1);
-        String uploadFileName = UUID.randomUUID() + "." + fileExtentionName;
-        File tartgetFile = new File(PropertiesUtil.getProperty("ftp.address"), uploadFileName);
-        try {
-            file.transferTo(tartgetFile);
-            return ServerResponse.createBySuccess(tartgetFile.getName());
-        } catch (IOException e) {
-            return ServerResponse.createByErrorMsg("上传失败");
+        // 参数校验
+        if (file == null || file.isEmpty()) {
+            return ServerResponse.createByErrorMsg("文件不能为空");
         }
 
+        try {
+            // 获取原始文件名
+            String fileName = file.getOriginalFilename();
+            if (fileName == null || fileName.trim().isEmpty()) {
+                return ServerResponse.createByErrorMsg("文件名无效");
+            }
 
+            // 安全地获取文件扩展名
+            String fileExtensionName = "";
+            int lastDotIndex = fileName.lastIndexOf(".");
+            if (lastDotIndex > 0 && lastDotIndex < fileName.length() - 1) {
+                fileExtensionName = fileName.substring(lastDotIndex + 1).toLowerCase();
+            } else {
+                return ServerResponse.createByErrorMsg("文件格式错误,无法识别扩展名");
+            }
+
+            // 验证文件扩展名是否合法
+            if (!isValidFileExtension(fileExtensionName)) {
+                return ServerResponse.createByErrorMsg("不支持的文件类型: " + fileExtensionName);
+            }
+
+            // 生成唯一文件名:时间戳 + 随机数
+            String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss_SSS").format(new Date());
+            int randomNum = new Random().nextInt(99999);
+            String uploadFileName = timeStamp + "_" + String.format("%05d", randomNum) + "." + fileExtensionName;
+
+            // 确保目标目录存在
+            File targetDir = new File(path);
+            if (!targetDir.exists()) {
+                if (!targetDir.mkdirs()) {
+                    return ServerResponse.createByErrorMsg("无法创建上传目录");
+                }
+            }
+
+            // 创建目标文件
+            File targetFile = new File(targetDir, uploadFileName);
+
+            // 保存文件
+            file.transferTo(targetFile);
+
+            // 验证文件是否成功保存
+            if (!targetFile.exists() || targetFile.length() == 0) {
+                return ServerResponse.createByErrorMsg("文件保存失败");
+            }
+
+            return ServerResponse.createBySuccess(uploadFileName);
+
+        } catch (IOException e) {
+            e.printStackTrace();
+            return ServerResponse.createByErrorMsg("文件上传失败: " + e.getMessage());
+        } catch (Exception e) {
+            e.printStackTrace();
+            return ServerResponse.createByErrorMsg("上传过程发生异常: " + e.getMessage());
+        }
+    }
+
+    /**
+     * 验证文件扩展名是否合法
+     */
+    private boolean isValidFileExtension(String fileExtension) {
+        if (fileExtension == null || fileExtension.trim().isEmpty()) {
+            return false;
+        }
+
+        // 定义允许的文件类型
+        String[] allowedExtensions = {
+                "jpg", "jpeg", "png"
+        };
+
+        for (String allowedExt : allowedExtensions) {
+            if (allowedExt.equalsIgnoreCase(fileExtension)) {
+                return true;
+            }
+        }
+
+        return false;
     }
 
 }

--
Gitblit v1.9.3