Forráskód Böngészése

优化调整上传文件代码,解决无法获取用户信息问题并增加获取引用路径

zhaojinyu 1 hónapja
szülő
commit
e9a4381e24

+ 109 - 5
base-modules/service-file/src/main/java/com/ruoyi/file/controller/FilesController.java

@@ -6,11 +6,17 @@ import com.ruoyi.file.domain.FilesUpload;
 import com.ruoyi.file.service.FilesService;
 import com.usky.common.core.bean.ApiResult;
 import com.usky.common.core.bean.CommonPage;
+import com.usky.common.security.utils.SecurityUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
 
+import javax.servlet.http.HttpServletRequest;
+import java.net.URL;
 import java.time.LocalDateTime;
+import java.util.Enumeration;
+import java.net.URLDecoder;
+import java.nio.charset.StandardCharsets;
 
 
 @RestController
@@ -21,17 +27,115 @@ public class FilesController {
     private FilesService filesService;
 
     @PostMapping("/upload")
-    public ApiResult<FileUploadResponse> upload(@RequestParam MultipartFile file) {
-        // 获取上传文件
-        FileUploadResponse response = filesService.upload(file);
+    public ApiResult<FileUploadResponse> upload(@RequestParam MultipartFile file, HttpServletRequest request) {
+        // 打印所有请求头,以便调试
+        Enumeration<String> headerNames = request.getHeaderNames();
+        while (headerNames.hasMoreElements()) {
+            String headerName = headerNames.nextElement();
+            String headerValue = request.getHeader(headerName);
+//            System.out.println(headerName + ": " + headerValue);
+        }
+
+        // 从请求头中获取 token
+        String token = request.getHeader("Authorization");
+
+        // 如果 token 为空或格式不正确,返回错误信息
+        if (token == null || token.isEmpty()) {
+            return ApiResult.error("令牌不能为空");
+        }
+
+        // 调用 SecurityUtils 的 getToken 方法解析 token
+        String parsedToken = SecurityUtils.getToken(request);
+
+        // 如果解析失败,返回错误信息
+        if (parsedToken == null || parsedToken.isEmpty()) {
+            return ApiResult.error("无效的令牌");
+        }
+
+        // 从请求头中获取 userid 和 username
+        String userid = request.getHeader("user_id");
+        String username = request.getHeader("username");
+
+        // 如果用户名为空或解码失败,设置为“未知用户”
+        if (username == null || username.isEmpty()) {
+            username = "未知用户";
+        } else {
+            try {
+                // 使用 URLDecoder 解码用户名
+                username = URLDecoder.decode(username, StandardCharsets.UTF_8.name());
+            } catch (Exception e) {
+                // 如果解码失败,设置为“未知用户”
+                username = "未知用户";
+            }
+        }
+
+        // 从请求头中获取 referer
+        String referer = request.getHeader("referer");
+        String refererPath = "";
+        if (referer != null && !referer.isEmpty()) {
+            try {
+                // 提取 referer 的路径部分
+                URL url = new URL(referer);
+                refererPath = url.getPath();
+            } catch (Exception e) {
+                System.out.println("无法解析 referer URL: " + referer);
+            }
+        }
+
+        // 打印 referer 路径部分
+//        System.out.println("Referer 路径部分: " + refererPath);
+
+        // 继续处理文件上传逻辑
+        FileUploadResponse response = filesService.upload(file, userid, username, refererPath);
         return ApiResult.success(response);
     }
 
 
     @DeleteMapping("/delete/{id}")
-    public ApiResult<String> delete(@PathVariable Integer id) {
+    public ApiResult<String> delete(@PathVariable Integer id, HttpServletRequest request) {
+        // 打印所有请求头,以便调试
+        Enumeration<String> headerNames = request.getHeaderNames();
+        while (headerNames.hasMoreElements()) {
+            String headerName = headerNames.nextElement();
+            String headerValue = request.getHeader(headerName);
+//            System.out.println(headerName + ": " + headerValue);
+        }
+
+        // 从请求头中获取 token
+        String token = request.getHeader("Authorization");
+
+        // 如果 token 为空或格式不正确,返回错误信息
+        if (token == null || token.isEmpty()) {
+            return ApiResult.error("令牌不能为空");
+        }
+
+        // 调用 SecurityUtils 的 getToken 方法解析 token
+        String parsedToken = SecurityUtils.getToken(request);
+
+        // 如果解析失败,返回错误信息
+        if (parsedToken == null || parsedToken.isEmpty()) {
+            return ApiResult.error("无效的令牌");
+        }
+
+        // 从请求头中获取 userid 和 username
+        String userid = request.getHeader("user_id");
+        String username = request.getHeader("username");
+
+        // 如果用户名为空或解码失败,设置为“未知用户”
+        if (username == null || username.isEmpty()) {
+            username = "未知用户";
+        } else {
+            try {
+                // 使用 URLDecoder 解码用户名
+                username = URLDecoder.decode(username, StandardCharsets.UTF_8.name());
+            } catch (Exception e) {
+                // 如果解码失败,设置为“未知用户”
+                username = "未知用户";
+            }
+        }
+
         try {
-            filesService.deleteFile(id);
+            filesService.deleteFile(id, userid, username);
             return ApiResult.success("删除成功");
         } catch (Exception e) {
             return ApiResult.error("删除失败"); // 删除失败,返回错误信息

+ 6 - 0
base-modules/service-file/src/main/java/com/ruoyi/file/domain/FilesUpload.java

@@ -26,16 +26,22 @@ public class FilesUpload implements Serializable {
 
     private String url;//下载链接
 
+    private  String refererPath;//引用路径
+
     private Boolean enable;//链接是否可用(1:是 0:否)
 
     private String createBy;//创建者
 
+    private String createId;//创建者ID
+
     @TableField(fill = FieldFill.INSERT)
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     private LocalDateTime createTime;//创建时间
 
     private String updateBy;//更新者
 
+    private String updateId;//更新者ID
+
     @TableField(fill = FieldFill.INSERT_UPDATE)
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     private LocalDateTime updateTime;//更新时间

+ 2 - 2
base-modules/service-file/src/main/java/com/ruoyi/file/service/FilesService.java

@@ -9,10 +9,10 @@ import java.time.LocalDateTime;
 
 public interface FilesService extends IService<FilesUpload> {
     // 修改返回类型为 FileUploadResponse
-    FileUploadResponse upload(MultipartFile file);
+    FileUploadResponse upload(MultipartFile file, String userid, String userName, String refererPath);
 
     // 删除文件
-    void deleteFile(Integer id);
+    void deleteFile(Integer id, String userid, String userName);
 
     // 查询方法
     CommonPage<FilesUpload> queryFiles(String filesName, LocalDateTime startTime, LocalDateTime endTime, Boolean isDeleted, String fileType, int current, int size);

+ 10 - 12
base-modules/service-file/src/main/java/com/ruoyi/file/service/impl/FilesServiceImpl.java

@@ -32,10 +32,10 @@ public class FilesServiceImpl extends ServiceImpl<FilesMapper, FilesUpload> impl
 
 
     @Override
-    public FileUploadResponse upload(MultipartFile file) {
+    public FileUploadResponse upload(MultipartFile file, String userid, String userName, String refererPath) {
 
         // 获取当前登录用户昵称(如果可用)
-        String userName = SecurityUtils.getUsername();
+//        String userName = SecurityUtils.getUsername();
 
         // 文件夹路径名称
         String originalFilename = file.getOriginalFilename();
@@ -86,8 +86,11 @@ public class FilesServiceImpl extends ServiceImpl<FilesMapper, FilesUpload> impl
             saveFile.setUrl(url);
             saveFile.setEnable(true);
             saveFile.setIsDelete(0);
+            saveFile.setRefererPath(refererPath);
+            saveFile.setCreateId(userid);
             saveFile.setCreateBy(userName);
             saveFile.setCreateTime(LocalDateTime.now());
+            saveFile.setUpdateId(null);
             saveFile.setUpdateBy(null);
             saveFile.setUpdateTime(null);
             // 保存操作
@@ -128,7 +131,7 @@ public class FilesServiceImpl extends ServiceImpl<FilesMapper, FilesUpload> impl
     }
 
     @Override
-    public void deleteFile(Integer id) {
+    public void deleteFile(Integer id, String userid, String userName) {
         try {
             // 根据 id 查询文件信息
             FilesUpload file = getById(id);
@@ -156,9 +159,12 @@ public class FilesServiceImpl extends ServiceImpl<FilesMapper, FilesUpload> impl
             updateFile.setUrl(file.getUrl());
             updateFile.setEnable(false);
             updateFile.setIsDelete(1); // 设置为已删除
+            updateFile.setRefererPath(file.getRefererPath());
+            updateFile.setCreateId(file.getCreateId());
             updateFile.setCreateBy(file.getCreateBy());
             updateFile.setCreateTime(file.getCreateTime()); // 保留原始的 createTime
-            updateFile.setUpdateBy(file.getUpdateBy());
+            updateFile.setUpdateId(userid);
+            updateFile.setUpdateBy(userName);
             updateFile.setUpdateTime(LocalDateTime.now());
 
             // 提交更新到数据库
@@ -215,12 +221,4 @@ public class FilesServiceImpl extends ServiceImpl<FilesMapper, FilesUpload> impl
         return commonPage;
     }
 
-    private String getUserNameFromSecurityContext() {
-        try {
-            return SecurityUtils.getUsername();
-        } catch (Exception e) {
-            // 如果无法获取用户信息,记录日志并返回默认值或抛出自定义异常
-            return "未知用户";
-        }
-    }
 }