编写后端接收上传文件代码。
This commit is contained in:
		@@ -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.
 | 
			
		||||
 
 | 
			
		||||
@@ -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 <wangkane@qq.com>
 | 
			
		||||
 * @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,15 +35,19 @@ public class FileUpload
 | 
			
		||||
     * 2、保存时不更改文件名,会覆盖同名文件。
 | 
			
		||||
     * 3、MultipartFile参数形参名称必须和请求form中file标签的name属性一致,否则值为null。
 | 
			
		||||
     * 4、返回值为接收结果和文件保存绝对路径。
 | 
			
		||||
     * 
 | 
			
		||||
     * @param taskName 任务名称字符串
 | 
			
		||||
     * @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();
 | 
			
		||||
@@ -69,11 +74,10 @@ public class FileUpload
 | 
			
		||||
        else
 | 
			
		||||
        {
 | 
			
		||||
            // 保存文件到临时目录
 | 
			
		||||
            Long milliSecond =
 | 
			
		||||
                    LocalDateTime.now().toInstant( ZoneOffset.of( "+8" ) ).toEpochMilli();
 | 
			
		||||
            Long   milliSecond = LocalDateTime.now().toInstant( ZoneOffset.of( "+8" ) ).toEpochMilli();
 | 
			
		||||
            String fileName    = String.valueOf( milliSecond ) + file.getOriginalFilename();
 | 
			
		||||
            // String fileName = file.getOriginalFilename();
 | 
			
		||||
            File   destFile    = new File( filePath, fileName );
 | 
			
		||||
            // String fileName = file.getOriginalFilename();
 | 
			
		||||
 | 
			
		||||
            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;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,9 +1,14 @@
 | 
			
		||||
/*
 | 
			
		||||
 * @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.
 | 
			
		||||
@@ -25,13 +30,16 @@ public class FileUploadResult extends QueryResponse
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 构造函数
 | 
			
		||||
     * 
 | 
			
		||||
     * @param success  是否上传成功
 | 
			
		||||
     * @param message  消息字符串
 | 
			
		||||
     * @param fileList 文件绝对路径字符串数组
 | 
			
		||||
     */
 | 
			
		||||
    public FileUploadResult( boolean success, 
 | 
			
		||||
    public FileUploadResult(
 | 
			
		||||
            boolean success,
 | 
			
		||||
            String message,
 | 
			
		||||
                             Vector<String> fileList )
 | 
			
		||||
            Vector<String> fileList
 | 
			
		||||
    )
 | 
			
		||||
    {
 | 
			
		||||
        super( success, message );
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -0,0 +1,26 @@
 | 
			
		||||
/**
 | 
			
		||||
 * @Author: Kane Wang <wangkane@qq.com>
 | 
			
		||||
 * @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);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,73 @@
 | 
			
		||||
/**
 | 
			
		||||
 * @Author: Kane Wang <wangkane@qq.com>
 | 
			
		||||
 * @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<String, String> saveUploadFile(
 | 
			
		||||
            MultipartFile[] files,
 | 
			
		||||
            String tempFilePath
 | 
			
		||||
    )
 | 
			
		||||
      throws ProcessUploadedFileException
 | 
			
		||||
    {
 | 
			
		||||
        HashMap<String, String> 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;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -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(
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user