diff --git a/code/backend/RegulatoryManagementBackend/src/main/java/com/cpic/xim/web/controllers/QueryResponse.java b/code/backend/RegulatoryManagementBackend/src/main/java/com/cpic/xim/web/controllers/QueryResponse.java index c1887a5..d96d3b8 100644 --- a/code/backend/RegulatoryManagementBackend/src/main/java/com/cpic/xim/web/controllers/QueryResponse.java +++ b/code/backend/RegulatoryManagementBackend/src/main/java/com/cpic/xim/web/controllers/QueryResponse.java @@ -1,8 +1,12 @@ /* * @Author: Kane + * * @Date: 2023-04-05 22:34:36 + * * @LastEditors: Kane + * * @FilePath: /desktop_archievement_backend/src/main/java/com/cpic/xim/web/controllers/QueryResponse.java + * * @Description: * * Copyright (c) ${2022} by Kane, All Rights Reserved. @@ -17,7 +21,7 @@ public class QueryResponse private boolean success; @JsonProperty( "message" ) - private String message; + private String message; public QueryResponse( boolean success, String message ) { @@ -54,8 +58,8 @@ public class QueryResponse @Override public int hashCode() { - final int prime = 31; - int result = 1; + final int prime = 31; + int result = 1; result = prime * result + (success ? 1231 : 1237); result = prime * result + ((message == null) ? 0 : message.hashCode()); return result; @@ -70,7 +74,7 @@ public class QueryResponse return false; if ( getClass() != obj.getClass() ) return false; - QueryResponse other = (QueryResponse) obj; + QueryResponse other = ( QueryResponse ) obj; if ( success != other.success ) return false; if ( message == null ) diff --git a/code/backend/RegulatoryManagementBackend/src/main/java/com/cpic/xim/web/controllers/fileupload/FileUpload.java b/code/backend/RegulatoryManagementBackend/src/main/java/com/cpic/xim/web/controllers/fileupload/FileUpload.java index 98a06e8..8e19bbc 100644 --- a/code/backend/RegulatoryManagementBackend/src/main/java/com/cpic/xim/web/controllers/fileupload/FileUpload.java +++ b/code/backend/RegulatoryManagementBackend/src/main/java/com/cpic/xim/web/controllers/fileupload/FileUpload.java @@ -1,14 +1,13 @@ -/* - * @Author: Kane - * @Date: 2023-01-22 23:11:26 - * @LastEditors: Kane - * @LastEditTime: 2023-10-23 17:01:29 - * @FilePath: /desktop_archievement_backend/src/main/java/com/cpic/xim/web/controllers/fileupload/FileUpload.java +/** + * @Author: Kane Wang + * @Date: 2025-10-15 11:42:56 + * @LastEditors: Kane Wang + * @LastModified: 2025-10-15 17:48:52 + * @FilePath: src/main/java/com/cpic/xim/web/controllers/fileupload/FileUpload.java * @Description: 用于接受上传文件的Controller。 - * - * Copyright (c) ${2022} by Kane, All Rights Reserved. + * + * Copyright (c) 2025 by Kane All rights reserved */ - package com.cpic.xim.web.controllers.fileupload; import java.io.File; @@ -22,11 +21,13 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.multipart.MultipartFile; +import org.springframework.web.bind.annotation.RequestMethod; + // @SuppressWarnings( "unused" ) @Controller @RequestMapping( path = "/file" ) -public class FileUpload +public abstract class FileUpload { /** * 接收上传文件,并保存到临时目录: @@ -34,30 +35,34 @@ public class FileUpload * 2、保存时不更改文件名,会覆盖同名文件。 * 3、MultipartFile参数形参名称必须和请求form中file标签的name属性一致,否则值为null。 * 4、返回值为接收结果和文件保存绝对路径。 + * * @param taskName 任务名称字符串 - * @param files MultipartFile结构的文件对象 - * @param request HttpServletRequest对象实例 + * @param files MultipartFile结构的文件对象 + * @param request HttpServletRequest对象实例 * @return 返回一个FileUploadResult对象,包含上传结果。 */ - @RequestMapping( path = "/file-upload.do" ) - @ResponseBody - public FileUploadResult getUploadFile( @RequestParam( "task-name" ) String taskName, - @RequestParam( "files" ) MultipartFile file, HttpServletRequest request ) + // @RequestMapping( path = "/file-upload.do" ) + // @ResponseBody + public FileUploadResult getUploadFile( + @RequestParam( "task-name" ) String taskName, + @RequestParam( "files" ) MultipartFile file, + HttpServletRequest request + ) { // session id用来创建临时目录,避免重复 - String sessionID = request.getSession().getId(); - FileUploadResult result = new FileUploadResult(); - Vector fileNames = new Vector(); + String sessionID = request.getSession().getId(); + FileUploadResult result = new FileUploadResult(); + Vector fileNames = new Vector(); result.setSuccess( true ); result.setMessage( "上传成功!" ); String filePath = request.getServletContext().getRealPath( "/temp/upload/" + sessionID ); - File dir = new File( filePath ); + File dir = new File( filePath ); if ( !dir.mkdirs() ) { - + } // 检查文件长度,如果为0则跳过 @@ -69,11 +74,10 @@ public class FileUpload else { // 保存文件到临时目录 - Long milliSecond = - LocalDateTime.now().toInstant( ZoneOffset.of( "+8" ) ).toEpochMilli(); - String fileName = String.valueOf( milliSecond ) + file.getOriginalFilename(); + Long milliSecond = LocalDateTime.now().toInstant( ZoneOffset.of( "+8" ) ).toEpochMilli(); + String fileName = String.valueOf( milliSecond ) + file.getOriginalFilename(); + File destFile = new File( filePath, fileName ); // String fileName = file.getOriginalFilename(); - File destFile = new File( filePath, fileName ); try { @@ -94,4 +98,46 @@ public class FileUpload return result; } + + @RequestMapping( path = "/file-upload.do" ) + @ResponseBody + public static FileUploadResult saveUploadFile( + @RequestParam( "file-name" ) String fileName, + @RequestParam( "files" ) MultipartFile file, + HttpServletRequest request + ) + { + // session id用来创建临时目录,避免重复 + String sessionID = request.getSession().getId(); + FileUploadResult result = new FileUploadResult(); + MultipartFile[] files = new MultipartFile[1]; + + result.setSuccess( true ); + result.setMessage( "上传成功!" ); + + String filePath = request.getServletContext().getRealPath( "/temp/upload/" + sessionID ); + File dir = new File( filePath ); + + // 创建临时目录 + if ( !dir.mkdirs() ) + { + result.setSuccess( false ); + result.setMessage( "创建临时目录失败:" + filePath ); + + return result; + } + + try + { + SaveUploadFile.saveUploadFile( files, filePath ); + } + catch ( ProcessUploadedFileException error ) + { + result.setSuccess( false ); + result.setMessage( error.getMessage() ); + } + + return result; + } + } diff --git a/code/backend/RegulatoryManagementBackend/src/main/java/com/cpic/xim/web/controllers/fileupload/FileUploadResult.java b/code/backend/RegulatoryManagementBackend/src/main/java/com/cpic/xim/web/controllers/fileupload/FileUploadResult.java index c21a96c..750bda8 100644 --- a/code/backend/RegulatoryManagementBackend/src/main/java/com/cpic/xim/web/controllers/fileupload/FileUploadResult.java +++ b/code/backend/RegulatoryManagementBackend/src/main/java/com/cpic/xim/web/controllers/fileupload/FileUploadResult.java @@ -1,12 +1,17 @@ /* * @Author: Kane - * @Date: 2023-01-23 22:56:17 - * @LastEditors: Kane - * @LastEditTime: 2023-10-06 00:32:47 - * @FilePath: /desktop_archievement_backend/src/main/java/com/cpic/xim/web/controllers/FileUpload/FileUploadResult.java - * @Description: * - * Copyright (c) ${2022} by Kane, All Rights Reserved. + * @Date: 2023-01-23 22:56:17 + * + * @LastEditors: Kane + * + * @LastEditTime: 2023-10-06 00:32:47 + * + * @FilePath: /desktop_archievement_backend/src/main/java/com/cpic/xim/web/controllers/FileUpload/FileUploadResult.java + * + * @Description: + * + * Copyright (c) ${2022} by Kane, All Rights Reserved. */ package com.cpic.xim.web.controllers.fileupload; @@ -25,13 +30,16 @@ public class FileUploadResult extends QueryResponse /** * 构造函数 - * @param success 是否上传成功 - * @param message 消息字符串 + * + * @param success 是否上传成功 + * @param message 消息字符串 * @param fileList 文件绝对路径字符串数组 */ - public FileUploadResult( boolean success, - String message, - Vector fileList ) + public FileUploadResult( + boolean success, + String message, + Vector fileList + ) { super( success, message ); diff --git a/code/backend/RegulatoryManagementBackend/src/main/java/com/cpic/xim/web/controllers/fileupload/ProcessUploadedFileException.java b/code/backend/RegulatoryManagementBackend/src/main/java/com/cpic/xim/web/controllers/fileupload/ProcessUploadedFileException.java new file mode 100644 index 0000000..080ecfb --- /dev/null +++ b/code/backend/RegulatoryManagementBackend/src/main/java/com/cpic/xim/web/controllers/fileupload/ProcessUploadedFileException.java @@ -0,0 +1,26 @@ +/** + * @Author: Kane Wang + * @Date: 2025-10-15 12:06:26 + * @LastEditors: Kane Wang + * @LastModified: 2025-10-16 09:59:39 + * @FilePath: src/main/java/com/cpic/xim/web/controllers/fileupload/ProcessUploadedFileException.java + * @Description: + * + * Copyright (c) 2025 by Kane All rights reserved + */ +package com.cpic.xim.web.controllers.fileupload; + +import java.io.IOException; + +public class ProcessUploadedFileException extends IOException +{ + ProcessUploadedFileException() + { + super("上传文件失败!"); + } + + ProcessUploadedFileException( String message ) + { + super(message); + } +} diff --git a/code/backend/RegulatoryManagementBackend/src/main/java/com/cpic/xim/web/controllers/fileupload/SaveUploadFile.java b/code/backend/RegulatoryManagementBackend/src/main/java/com/cpic/xim/web/controllers/fileupload/SaveUploadFile.java new file mode 100644 index 0000000..c0b8e9c --- /dev/null +++ b/code/backend/RegulatoryManagementBackend/src/main/java/com/cpic/xim/web/controllers/fileupload/SaveUploadFile.java @@ -0,0 +1,73 @@ +/** + * @Author: Kane Wang + * @Date: 2025-10-16 09:46:42 + * @LastEditors: Kane Wang + * @LastModified: 2025-10-16 10:50:45 + * @FilePath: src/main/java/com/cpic/xim/web/controllers/fileupload/SaveUploadFile.java + * @Description: + * + * Copyright (c) 2025 by Kane All rights reserved + */ +package com.cpic.xim.web.controllers.fileupload; + +import java.io.File; +import java.io.IOException; +import java.util.HashMap; +import org.springframework.web.multipart.MultipartFile; + + +public class SaveUploadFile +{ + public static HashMap saveUploadFile( + MultipartFile[] files, + String tempFilePath + ) + throws ProcessUploadedFileException + { + HashMap savedFiles = new HashMap<>(); + // File dir = new File( tempFilePath ); + String fileName = ""; + String fullPath; + + // if ( !dir.mkdir() ) + // { + // // 创建目录失败 + // throw new ProcessUploadedFileException( "创建临时目录失败:" + tempFilePath ); + // } + + if ( !(tempFilePath.endsWith( "/" ) || tempFilePath.endsWith( "\\" )) ) + { + fullPath = tempFilePath + "/"; + } + else + { + fullPath = tempFilePath; + } + + try + { + for ( MultipartFile file : files ) + { + // 空文件跳过 + if ( file.isEmpty() ) + { + continue; + } + + fileName = file.getOriginalFilename(); + File destFile = new File( tempFilePath, fileName ); + + file.transferTo( destFile ); + + + savedFiles.put( fileName, fullPath + fileName ); + } + } + catch ( IOException error ) + { + throw new ProcessUploadedFileException( "临时目录" + tempFilePath + "保存文件" + fileName + "失败!" ); + } + + return savedFiles; + } +} diff --git a/code/backend/RegulatoryManagementBackend/src/main/java/com/cpic/xim/web/filters/cros/CrosFilter.java b/code/backend/RegulatoryManagementBackend/src/main/java/com/cpic/xim/web/filters/cros/CrosFilter.java index c1abfa0..ecd59f6 100644 --- a/code/backend/RegulatoryManagementBackend/src/main/java/com/cpic/xim/web/filters/cros/CrosFilter.java +++ b/code/backend/RegulatoryManagementBackend/src/main/java/com/cpic/xim/web/filters/cros/CrosFilter.java @@ -27,7 +27,12 @@ public class CrosFilter implements Filter private static Logger logger = LoggerFactory.getLogger( CrosFilter.class ); /** + * * @param req + * @param resp + * @param chain + * @throws ServletException + * @throws IOException */ @Override public void doFilter( diff --git a/code/backend/RegulatoryManagementBackend/src/main/resources/log4j2.xml b/code/backend/RegulatoryManagementBackend/src/main/resources/log4j2.xml index e99d2f7..00baa3b 100644 --- a/code/backend/RegulatoryManagementBackend/src/main/resources/log4j2.xml +++ b/code/backend/RegulatoryManagementBackend/src/main/resources/log4j2.xml @@ -4,7 +4,7 @@ - [%t][%level][%d{HH:mm:ss.SSS}][%logger.%M{36}#%L] %msg%n