From 56e0f93811ba1370c616897001344eaefc89357c Mon Sep 17 00:00:00 2001 From: pveayojnc <3273195329@qq.com> Date: Tue, 29 Apr 2025 18:15:48 +0800 Subject: [PATCH] Update LocalUploadUtil.java --- .../java/com/zsz/util/LocalUploadUtil.java | 63 +++++++++++++++---- 1 file changed, 52 insertions(+), 11 deletions(-) diff --git a/src/main/java/com/zsz/util/LocalUploadUtil.java b/src/main/java/com/zsz/util/LocalUploadUtil.java index 28829cf..3aea8f1 100644 --- a/src/main/java/com/zsz/util/LocalUploadUtil.java +++ b/src/main/java/com/zsz/util/LocalUploadUtil.java @@ -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; } - -} +} \ No newline at end of file