|
|
|
@ -1,67 +1,108 @@
|
|
|
|
|
package com.zsz.util;
|
|
|
|
|
|
|
|
|
|
// 导入自定义的系统配置类,用于获取系统相关配置信息
|
|
|
|
|
import com.zsz.config.SystemUtil;
|
|
|
|
|
// 导入 Lombok 的日志注解,可自动生成日志记录对象
|
|
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
|
|
// 导入 Spring 框架的 Component 注解,将该类标记为组件,以便 Spring 进行管理
|
|
|
|
|
import org.springframework.stereotype.Component;
|
|
|
|
|
// 导入 Spring 框架处理文件上传的 MultipartFile 类
|
|
|
|
|
import org.springframework.web.multipart.MultipartFile;
|
|
|
|
|
|
|
|
|
|
// 导入 Spring 框架的资源注入注解
|
|
|
|
|
import javax.annotation.Resource;
|
|
|
|
|
// 导入 Java 的文件操作类
|
|
|
|
|
import java.io.File;
|
|
|
|
|
// 导入 Java 的输入输出异常类
|
|
|
|
|
import java.io.IOException;
|
|
|
|
|
// 导入 Java 的日期格式化类
|
|
|
|
|
import java.text.SimpleDateFormat;
|
|
|
|
|
// 导入 Java 的日期类
|
|
|
|
|
import java.util.Date;
|
|
|
|
|
// 导入 Java 的随机数生成类
|
|
|
|
|
import java.util.Random;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* LocalUploadUtil 类用于处理文件的本地上传操作。
|
|
|
|
|
* 该类会将上传的文件保存到本地指定目录,并生成唯一的文件名。
|
|
|
|
|
*/
|
|
|
|
|
// 将该类标记为 Spring 组件,以便 Spring 自动扫描并管理
|
|
|
|
|
@Component
|
|
|
|
|
// 使用 Lombok 的 Slf4j 注解,自动生成日志记录对象
|
|
|
|
|
@Slf4j
|
|
|
|
|
public class LocalUploadUtil {
|
|
|
|
|
|
|
|
|
|
// 定义上传文件路径的前缀
|
|
|
|
|
public static final String PATH_PREFIX = "/upload/";
|
|
|
|
|
|
|
|
|
|
// 注入系统配置类的实例,用于获取文件保存的前缀路径
|
|
|
|
|
@Resource
|
|
|
|
|
private SystemUtil systemUtil;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 处理文件上传的方法
|
|
|
|
|
* @param file 要上传的 MultipartFile 对象
|
|
|
|
|
* @return 上传后文件的相对路径
|
|
|
|
|
*/
|
|
|
|
|
public String upload(MultipartFile file) {
|
|
|
|
|
// 生成新的文件名
|
|
|
|
|
String newFileName = genNewFileName(file);
|
|
|
|
|
|
|
|
|
|
// 创建本地文件夹
|
|
|
|
|
// 创建本地文件夹对象,使用系统配置中的文件前缀路径
|
|
|
|
|
File fileDirectory = new File(systemUtil.getFilePrefix());
|
|
|
|
|
// 检查文件夹是否存在
|
|
|
|
|
if (!fileDirectory.exists()) {
|
|
|
|
|
// 如果不存在,创建文件夹
|
|
|
|
|
// 如果文件夹不存在,则尝试创建
|
|
|
|
|
if (!fileDirectory.mkdir()) {
|
|
|
|
|
// 如果创建失败,抛出运行时异常
|
|
|
|
|
throw new RuntimeException("文件夹创建失败,路径为:" + fileDirectory);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
try {
|
|
|
|
|
//创建文件
|
|
|
|
|
// 创建目标文件对象,使用系统配置的文件前缀和新生成的文件名
|
|
|
|
|
File destFile = new File(systemUtil.getFilePrefix() + newFileName);
|
|
|
|
|
// 文件传输到本地
|
|
|
|
|
// 将上传的文件传输到目标文件
|
|
|
|
|
file.transferTo(destFile);
|
|
|
|
|
} catch (IOException e) {
|
|
|
|
|
// 记录文件创建失败的错误日志
|
|
|
|
|
log.error("文件创建失败:{}", e.getMessage(), e);
|
|
|
|
|
// 抛出运行时异常,提示文件创建失败
|
|
|
|
|
throw new RuntimeException("文件创建失败:{}" + e.getMessage());
|
|
|
|
|
}
|
|
|
|
|
// 返回上传后文件的相对路径
|
|
|
|
|
return PATH_PREFIX + newFileName;
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 生成文件名称
|
|
|
|
|
* 生成新的文件名
|
|
|
|
|
* @param file 上传的文件对象
|
|
|
|
|
* @return 生成的新文件名
|
|
|
|
|
*/
|
|
|
|
|
private static String genNewFileName(MultipartFile file) {
|
|
|
|
|
// 创建日期格式化对象,指定日期格式
|
|
|
|
|
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd_HHmmss");
|
|
|
|
|
// 创建 StringBuilder 对象,用于构建文件名
|
|
|
|
|
StringBuilder fileName = new StringBuilder();
|
|
|
|
|
fileName.append(sdf.format(new Date())).append(new Random().nextInt(100)).append(getSuffixName(file));
|
|
|
|
|
// 将当前日期格式化后添加到文件名中
|
|
|
|
|
fileName.append(sdf.format(new Date()));
|
|
|
|
|
// 生成一个 0 到 99 之间的随机数并添加到文件名中
|
|
|
|
|
fileName.append(new Random().nextInt(100));
|
|
|
|
|
// 获取文件的后缀名并添加到文件名中
|
|
|
|
|
fileName.append(getSuffixName(file));
|
|
|
|
|
// 返回生成的新文件名
|
|
|
|
|
return fileName.toString();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 获取文件后缀名称
|
|
|
|
|
* 获取文件的后缀名
|
|
|
|
|
* @param file 上传的文件对象
|
|
|
|
|
* @return 文件的后缀名
|
|
|
|
|
*/
|
|
|
|
|
private static String getSuffixName(MultipartFile file) {
|
|
|
|
|
// 获取文件的原始文件名
|
|
|
|
|
String fileName = file.getOriginalFilename();
|
|
|
|
|
// 从文件名中截取后缀名
|
|
|
|
|
String suffixName = fileName.substring(fileName.lastIndexOf("."));
|
|
|
|
|
// 返回文件的后缀名
|
|
|
|
|
return suffixName;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|