修改接受文件的控制器

This commit is contained in:
2025-11-13 15:48:36 +08:00
parent 524ea68d89
commit 1b40137cf9
7 changed files with 193 additions and 153 deletions

View File

@@ -0,0 +1,148 @@
/**
* @Author: Kane Wang <wangkane@qq.com>
* @Date: 2025-10-16 09:46:42
* @LastEditors: Kane Wang
* @LastModified: 2025-11-13 15:25:07
* @FilePath: src/main/java/com/cpic/xim/utils/files/SaveUploadFile.java
* @Description:
*
* Copyright (c) 2025 by Kane All rights reserved
*/
package com.cpic.xim.utils.files;
import java.io.File;
import java.io.IOException;
import java.time.LocalDateTime;
import java.time.ZoneOffset;
import java.util.HashMap;
import java.util.Vector;
import org.springframework.web.multipart.MultipartFile;
import com.cpic.xim.utils.files.exceptions.MoveUploadedFileException;
import com.cpic.xim.utils.files.exceptions.ProcessUploadedFileException;
public class SaveUploadFile
{
/**
*
* @param files
* @param tempFilePath
* @return
* @throws ProcessUploadedFileException
*/
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 ( !(tempFilePath.endsWith( "/" ) || tempFilePath.endsWith( "\\" )) )
{
fullPath = tempFilePath + "/";
}
else
{
fullPath = tempFilePath;
}
try
{
for ( MultipartFile file : files )
{
// 空文件跳过
if ( file.isEmpty() )
{
continue;
}
// 文件名前加上时间戳,避免覆盖
Long milliSecond = LocalDateTime.now().toInstant( ZoneOffset.of( "+8" ) ).toEpochMilli();
fileName = String.valueOf( milliSecond ) + " - " + 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;
}
public static Vector<UploadedFile> saveUploadFiles(
MultipartFile[] files,
String tempFilePath
)
throws ProcessUploadedFileException
{
Vector<UploadedFile> savedFiles = new Vector<>();
UploadedFile uploadedFile = null;
// File dir = new File( tempFilePath );
String fileName = "";
String fullPath;
if ( !(tempFilePath.endsWith( "/" ) || tempFilePath.endsWith( "\\" )) )
{
fullPath = tempFilePath + "/";
}
else
{
fullPath = tempFilePath;
}
try
{
for ( MultipartFile file : files )
{
// 空文件跳过
if ( file.isEmpty() )
{
continue;
}
// 文件名前加上时间戳,避免覆盖
Long milliSecond = LocalDateTime.now().toInstant( ZoneOffset.of( "+8" ) ).toEpochMilli();
fileName = String.valueOf( milliSecond ) + " - " + file.getOriginalFilename();
File destFile = new File( tempFilePath, fileName );
file.transferTo( destFile );
uploadedFile = new UploadedFile(fileName, fullPath);
savedFiles.add( uploadedFile );
}
}
catch ( IOException error )
{
throw new ProcessUploadedFileException( "临时目录" + tempFilePath + "保存文件" + fileName + "失败!" );
}
return savedFiles;
}
/**
*
* @param originFilePath 文件路径
* @param newFilePath 新文件存放路径
* @throws MoveUploadedFileException
*/
public static void MoveUploadedFile(
String originFilePath,
String newFilePath
) throws MoveUploadedFileException
{
}
}

View File

@@ -8,7 +8,7 @@
* *
* Copyright (c) 2025 by Kane All rights reserved * Copyright (c) 2025 by Kane All rights reserved
*/ */
package com.cpic.xim.web.controllers.fileupload; package com.cpic.xim.utils.files;
public class UploadedFile public class UploadedFile
{ {

View File

@@ -0,0 +1,26 @@
/**
* @Author: Kane Wang <wangkane@qq.com>
* @Date: 2025-11-13 14:44:42
* @LastEditors: Kane Wang
* @LastModified: 2025-11-13 14:45:56
* @FilePath: src/main/java/com/cpic/xim/utils/files/exceptions/MoveUploadedFileException.java
* @Description:
*
* Copyright (c) 2025 by Kane All rights reserved
*/
package com.cpic.xim.utils.files.exceptions;
import java.io.IOException;
public class MoveUploadedFileException extends IOException
{
public MoveUploadedFileException()
{
super("移动文件失败。");
}
public MoveUploadedFileException( String message )
{
super( message );
}
}

View File

@@ -2,24 +2,24 @@
* @Author: Kane Wang <wangkane@qq.com> * @Author: Kane Wang <wangkane@qq.com>
* @Date: 2025-10-15 12:06:26 * @Date: 2025-10-15 12:06:26
* @LastEditors: Kane Wang * @LastEditors: Kane Wang
* @LastModified: 2025-10-16 09:59:39 * @LastModified: 2025-11-13 10:36:12
* @FilePath: src/main/java/com/cpic/xim/web/controllers/fileupload/ProcessUploadedFileException.java * @FilePath: src/main/java/com/cpic/xim/utils/files/exceptions/ProcessUploadedFileException.java
* @Description: * @Description:
* *
* Copyright (c) 2025 by Kane All rights reserved * Copyright (c) 2025 by Kane All rights reserved
*/ */
package com.cpic.xim.web.controllers.fileupload; package com.cpic.xim.utils.files.exceptions;
import java.io.IOException; import java.io.IOException;
public class ProcessUploadedFileException extends IOException public class ProcessUploadedFileException extends IOException
{ {
ProcessUploadedFileException() public ProcessUploadedFileException()
{ {
super("上传文件失败!"); super("上传文件失败!");
} }
ProcessUploadedFileException( String message ) public ProcessUploadedFileException( String message )
{ {
super(message); super(message);
} }

View File

@@ -11,17 +11,20 @@
package com.cpic.xim.web.controllers.fileupload; package com.cpic.xim.web.controllers.fileupload;
import java.io.File; import java.io.File;
import java.io.IOException;
import java.time.LocalDateTime;
import java.time.ZoneOffset;
import java.util.Vector; import java.util.Vector;
import jakarta.servlet.http.HttpServletRequest;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
import com.cpic.xim.utils.files.SaveUploadFile;
import com.cpic.xim.utils.files.UploadedFile;
import com.cpic.xim.utils.files.exceptions.ProcessUploadedFileException;
import jakarta.servlet.http.HttpServletRequest;
// @SuppressWarnings( "unused" ) // @SuppressWarnings( "unused" )
@Controller @Controller
@RequestMapping( path = "/file" ) @RequestMapping( path = "/file" )
@@ -34,80 +37,10 @@ public class FileUpload
* 3、MultipartFile参数形参名称必须和请求form中file标签的name属性一致否则值为null。 * 3、MultipartFile参数形参名称必须和请求form中file标签的name属性一致否则值为null。
* 4、返回值为接收结果和文件保存绝对路径。 * 4、返回值为接收结果和文件保存绝对路径。
* *
* @deprecated
* @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
// )
// {
// // session id用来创建临时目录避免重复
// String sessionID = request.getSession().getId();
// FileUploadResult result = new FileUploadResult();
// Vector<String> fileNames = new Vector<String>();
// result.setSuccess( true );
// result.setMessage( "上传成功!" );
// String filePath = request.getServletContext().getRealPath( "/temp/upload/" + sessionID );
// File dir = new File( filePath );
// if ( !dir.mkdirs() )
// {
// }
// // 检查文件长度如果为0则跳过
// if ( file.isEmpty() )
// {
// result.setSuccess( false );
// result.setMessage( "不允许上传空文件。" );
// }
// else
// {
// // 保存文件到临时目录
// 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();
// try
// {
// file.transferTo( destFile );
// // 把上传文件的绝对路径保存,返回给前端
// fileNames.add( destFile.getAbsolutePath() );
// result.setSuccess( true );
// result.setMessage( "上传成功" );
// result.setFileList( fileNames );
// }
// catch ( IOException error )
// {
// result.setSuccess( false );
// result.setMessage( "上传失败,原因:" + error.getMessage() );
// }
// }
// return result;
// }
/**
* 接收上传文件,并保存到临时目录:
* 1、临时目录下再用sessionID作为子目录保存文件。
* 2、保存时不更改文件名会覆盖同名文件。
* 3、MultipartFile参数形参名称必须和请求form中file标签的name属性一致否则值为null。
* 4、返回值为接收结果和文件保存绝对路径。
* @param fileName * @param fileName
* @param file * @param file
* @param request * @param request
* @return * @return FileUploadResult 文件上传结果对象
*/ */
@RequestMapping( path = "/file-upload.do" ) @RequestMapping( path = "/file-upload.do" )
@ResponseBody @ResponseBody
@@ -141,7 +74,9 @@ public class FileUpload
{ {
files[0] = file; files[0] = file;
SaveUploadFile.saveUploadFile( files, filePath ); Vector<UploadedFile> uploadFiles = SaveUploadFile.saveUploadFiles( files, filePath );
result.setFileList( uploadFiles );
} }
catch ( ProcessUploadedFileException error ) catch ( ProcessUploadedFileException error )
{ {

View File

@@ -17,6 +17,8 @@
package com.cpic.xim.web.controllers.fileupload; package com.cpic.xim.web.controllers.fileupload;
import java.util.Vector; import java.util.Vector;
import com.cpic.xim.utils.files.UploadedFile;
import com.cpic.xim.web.controllers.QueryResponse; import com.cpic.xim.web.controllers.QueryResponse;
import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonProperty;

View File

@@ -1,71 +0,0 @@
/**
* @Author: Kane Wang <wangkane@qq.com>
* @Date: 2025-10-16 09:46:42
* @LastEditors: Kane Wang
* @LastModified: 2025-10-16 15:16:57
* @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.time.LocalDateTime;
import java.time.ZoneOffset;
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 ( !(tempFilePath.endsWith( "/" ) || tempFilePath.endsWith( "\\" )) )
{
fullPath = tempFilePath + "/";
}
else
{
fullPath = tempFilePath;
}
try
{
for ( MultipartFile file : files )
{
// 空文件跳过
if ( file.isEmpty() )
{
continue;
}
// 文件名前加上时间戳,避免覆盖
Long milliSecond = LocalDateTime.now().toInstant( ZoneOffset.of( "+8" ) ).toEpochMilli();
fileName = String.valueOf( milliSecond ) + " - " + 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;
}
}