修改接受文件的控制器
This commit is contained in:
@@ -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
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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
|
||||||
{
|
{
|
||||||
@@ -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 );
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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);
|
||||||
}
|
}
|
||||||
@@ -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 )
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|
||||||
|
|||||||
@@ -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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Reference in New Issue
Block a user