update 优化媒体工具类,添加私有构造函数以防止实例化

This commit is contained in:
AprilWind
2026-06-04 12:19:41 +08:00
parent bd237fcf08
commit 94d7cd3489
8 changed files with 122 additions and 72 deletions
@@ -2,6 +2,8 @@ package org.dromara.common.core.utils;
import cn.hutool.core.date.DateUnit; import cn.hutool.core.date.DateUnit;
import cn.hutool.core.date.DateUtil; import cn.hutool.core.date.DateUtil;
import lombok.AccessLevel;
import lombok.NoArgsConstructor;
import org.apache.commons.lang3.time.DateFormatUtils; import org.apache.commons.lang3.time.DateFormatUtils;
import org.dromara.common.core.enums.FormatsType; import org.dromara.common.core.enums.FormatsType;
import org.dromara.common.core.exception.ServiceException; import org.dromara.common.core.exception.ServiceException;
@@ -19,6 +21,7 @@ import java.util.concurrent.TimeUnit;
* *
* @author ruoyi * @author ruoyi
*/ */
@NoArgsConstructor(access = AccessLevel.PRIVATE)
public class DateUtils extends org.apache.commons.lang3.time.DateUtils { public class DateUtils extends org.apache.commons.lang3.time.DateUtils {
/** /**
* 日期解析格式集合。 * 日期解析格式集合。
@@ -26,14 +29,8 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils {
private static final String[] PARSE_PATTERNS = { private static final String[] PARSE_PATTERNS = {
"yyyy-MM-dd", "yyyy-MM-dd HH:mm:ss", "yyyy-MM-dd HH:mm", "yyyy-MM", "yyyy-MM-dd", "yyyy-MM-dd HH:mm:ss", "yyyy-MM-dd HH:mm", "yyyy-MM",
"yyyy/MM/dd", "yyyy/MM/dd HH:mm:ss", "yyyy/MM/dd HH:mm", "yyyy/MM", "yyyy/MM/dd", "yyyy/MM/dd HH:mm:ss", "yyyy/MM/dd HH:mm", "yyyy/MM",
"yyyy.MM.dd", "yyyy.MM.dd HH:mm:ss", "yyyy.MM.dd HH:mm", "yyyy.MM"}; "yyyy.MM.dd", "yyyy.MM.dd HH:mm:ss", "yyyy.MM.dd HH:mm", "yyyy.MM"
};
/**
* 工具类不允许实例化。
*/
@Deprecated
private DateUtils() {
}
/** /**
* 获取当前日期和时间 * 获取当前日期和时间
@@ -4,6 +4,8 @@ import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.convert.Convert; import cn.hutool.core.convert.Convert;
import cn.hutool.core.lang.Validator; import cn.hutool.core.lang.Validator;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import lombok.AccessLevel;
import lombok.NoArgsConstructor;
import org.apache.commons.lang3.Strings; import org.apache.commons.lang3.Strings;
import org.springframework.util.AntPathMatcher; import org.springframework.util.AntPathMatcher;
@@ -17,6 +19,7 @@ import java.util.stream.Collectors;
* *
* @author Lion Li * @author Lion Li
*/ */
@NoArgsConstructor(access = AccessLevel.PRIVATE)
public class StringUtils extends org.apache.commons.lang3.StringUtils { public class StringUtils extends org.apache.commons.lang3.StringUtils {
public static final String SEPARATOR = ","; public static final String SEPARATOR = ",";
@@ -25,10 +28,6 @@ public class StringUtils extends org.apache.commons.lang3.StringUtils {
private static final AntPathMatcher ANT_PATH_MATCHER = new AntPathMatcher(); private static final AntPathMatcher ANT_PATH_MATCHER = new AntPathMatcher();
@Deprecated
private StringUtils() {
}
/** /**
* 获取参数不为空值 * 获取参数不为空值
* *
@@ -363,6 +362,7 @@ public class StringUtils extends org.apache.commons.lang3.StringUtils {
return input; return input;
} }
} }
/** /**
* 将可迭代对象中的元素使用逗号拼接成字符串 * 将可迭代对象中的元素使用逗号拼接成字符串
* *
@@ -1,60 +1,64 @@
package org.dromara.common.core.utils.file; package org.dromara.common.core.utils.file;
import cn.hutool.core.util.StrUtil;
import lombok.AccessLevel;
import lombok.NoArgsConstructor;
/** /**
* 媒体类型工具类 * 媒体类型工具类
* *
* @author ruoyi * @author ruoyi
*/ */
@NoArgsConstructor(access = AccessLevel.PRIVATE)
public class MimeTypeUtils { public class MimeTypeUtils {
/** /**
* PNG 图片 MIME 类型 * PNG 图片 MIME 类型
*/ */
public static final String IMAGE_PNG = "image/png"; public static final String IMAGE_PNG = "image/png";
/** /**
* JPG 图片 MIME 类型 * JPG 图片 MIME 类型
*/ */
public static final String IMAGE_JPG = "image/jpg"; public static final String IMAGE_JPG = "image/jpg";
/** /**
* JPEG 图片 MIME 类型 * JPEG 图片 MIME 类型
*/ */
public static final String IMAGE_JPEG = "image/jpeg"; public static final String IMAGE_JPEG = "image/jpeg";
/** /**
* BMP 图片 MIME 类型 * BMP 图片 MIME 类型
*/ */
public static final String IMAGE_BMP = "image/bmp"; public static final String IMAGE_BMP = "image/bmp";
/** /**
* GIF 图片 MIME 类型 * GIF 图片 MIME 类型
*/ */
public static final String IMAGE_GIF = "image/gif"; public static final String IMAGE_GIF = "image/gif";
/** /**
* 图片扩展名集合。 * 图片扩展名数组
*/ */
public static final String[] IMAGE_EXTENSION = {"bmp", "gif", "jpg", "jpeg", "png"}; public static final String[] IMAGE_EXTENSION = {"bmp", "gif", "jpg", "jpeg", "png"};
/** /**
* Flash 扩展名集合。 * Flash 文件扩展名数组
*/ */
public static final String[] FLASH_EXTENSION = {"swf", "flv"}; public static final String[] FLASH_EXTENSION = {"swf", "flv"};
/** /**
* 媒体扩展名集合。 * 视频文件扩展名数组
*/
public static final String[] MEDIA_EXTENSION = {"swf", "flv", "mp3", "wav", "wma", "wmv", "mid", "avi", "mpg",
"asf", "rm", "rmvb"};
/**
* 视频扩展名集合。
*/ */
public static final String[] VIDEO_EXTENSION = {"mp4", "avi", "rmvb"}; public static final String[] VIDEO_EXTENSION = {"mp4", "avi", "rmvb"};
/** /**
* 默认允许上传扩展名集合。 * 媒体文件扩展名数组(音频+视频+Flash)
*/
public static final String[] MEDIA_EXTENSION = {"swf", "flv", "mp3", "wav", "wma", "wmv", "mid", "avi", "mpg", "asf", "rm", "rmvb"};
/**
* 默认允许上传的文件扩展名数组
*/ */
public static final String[] DEFAULT_ALLOWED_EXTENSION = { public static final String[] DEFAULT_ALLOWED_EXTENSION = {
// 图片 // 图片
@@ -66,6 +70,47 @@ public class MimeTypeUtils {
// 视频格式 // 视频格式
"mp4", "avi", "rmvb", "mp4", "avi", "rmvb",
// pdf // pdf
"pdf"}; "pdf"
};
/**
* 判断文件扩展名是否为图片格式(忽略大小写)
*
* @param extension 文件扩展名
* @return 是图片返回 true,否则返回 false
*/
public static boolean isImage(String extension) {
return StrUtil.equalsAnyIgnoreCase(extension, IMAGE_EXTENSION);
}
/**
* 判断文件扩展名是否为视频格式(忽略大小写)
*
* @param extension 文件扩展名
* @return 是视频返回 true,否则返回 false
*/
public static boolean isVideo(String extension) {
return StrUtil.equalsAnyIgnoreCase(extension, VIDEO_EXTENSION);
}
/**
* 判断文件扩展名是否为媒体格式(忽略大小写)
*
* @param extension 文件扩展名
* @return 是媒体返回 true,否则返回 false
*/
public static boolean isMedia(String extension) {
return StrUtil.equalsAnyIgnoreCase(extension, MEDIA_EXTENSION);
}
/**
* 判断文件扩展名是否在默认允许上传范围内(忽略大小写)
*
* @param extension 文件扩展名
* @return 允许返回 true,不允许返回 false
*/
public static boolean isDefaultAllowed(String extension) {
return StrUtil.equalsAnyIgnoreCase(extension, DEFAULT_ALLOWED_EXTENSION);
}
} }
@@ -1,6 +1,8 @@
package org.dromara.common.core.utils.ip; package org.dromara.common.core.utils.ip;
import cn.hutool.core.io.resource.ResourceUtil; import cn.hutool.core.io.resource.ResourceUtil;
import lombok.AccessLevel;
import lombok.NoArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.dromara.common.core.exception.ServiceException; import org.dromara.common.core.exception.ServiceException;
import org.dromara.common.core.utils.StringUtils; import org.dromara.common.core.utils.StringUtils;
@@ -19,6 +21,7 @@ import java.time.Duration;
* @author 秋辞未寒 * @author 秋辞未寒
*/ */
@Slf4j @Slf4j
@NoArgsConstructor(access = AccessLevel.PRIVATE)
public class RegionUtils { public class RegionUtils {
// 默认IPv4地址库文件路径 // 默认IPv4地址库文件路径
@@ -2,6 +2,8 @@ package org.dromara.common.core.utils.regex;
import cn.hutool.core.util.ReUtil; import cn.hutool.core.util.ReUtil;
import lombok.AccessLevel;
import lombok.NoArgsConstructor;
import org.dromara.common.core.constant.RegexConstants; import org.dromara.common.core.constant.RegexConstants;
/** /**
@@ -9,6 +11,7 @@ import org.dromara.common.core.constant.RegexConstants;
* *
* @author AprilWind * @author AprilWind
*/ */
@NoArgsConstructor(access = AccessLevel.PRIVATE)
public final class RegexUtils extends ReUtil { public final class RegexUtils extends ReUtil {
/** /**
@@ -2,6 +2,8 @@ package org.dromara.common.core.utils.regex;
import cn.hutool.core.exceptions.ValidateException; import cn.hutool.core.exceptions.ValidateException;
import cn.hutool.core.lang.Validator; import cn.hutool.core.lang.Validator;
import lombok.AccessLevel;
import lombok.NoArgsConstructor;
import org.dromara.common.core.factory.RegexPatternPoolFactory; import org.dromara.common.core.factory.RegexPatternPoolFactory;
import java.util.regex.Pattern; import java.util.regex.Pattern;
@@ -12,6 +14,7 @@ import java.util.regex.Pattern;
* *
* @author AprilWind * @author AprilWind
*/ */
@NoArgsConstructor(access = AccessLevel.PRIVATE)
public class RegexValidator extends Validator { public class RegexValidator extends Validator {
/** /**
@@ -5,6 +5,8 @@ import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.baomidou.mybatisplus.core.toolkit.StringUtils; import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.core.toolkit.support.LambdaMeta; import com.baomidou.mybatisplus.core.toolkit.support.LambdaMeta;
import com.baomidou.mybatisplus.core.toolkit.support.SFunction; import com.baomidou.mybatisplus.core.toolkit.support.SFunction;
import lombok.AccessLevel;
import lombok.NoArgsConstructor;
import org.apache.ibatis.reflection.property.PropertyNamer; import org.apache.ibatis.reflection.property.PropertyNamer;
import java.util.regex.Pattern; import java.util.regex.Pattern;
@@ -14,6 +16,7 @@ import java.util.regex.Pattern;
* *
* @author Lion Li * @author Lion Li
*/ */
@NoArgsConstructor(access = AccessLevel.PRIVATE)
public final class AggregateSelectUtils { public final class AggregateSelectUtils {
/** /**
@@ -21,12 +24,6 @@ public final class AggregateSelectUtils {
*/ */
private static final Pattern ALIAS_PATTERN = Pattern.compile("[A-Za-z_][A-Za-z0-9_]*"); private static final Pattern ALIAS_PATTERN = Pattern.compile("[A-Za-z_][A-Za-z0-9_]*");
/**
* 工具类不允许实例化。
*/
private AggregateSelectUtils() {
}
/** /**
* 追加查询字段 SQL。 * 追加查询字段 SQL。
* *
@@ -124,7 +124,7 @@ public class SysProfileController extends BaseController {
public R<AvatarVo> avatar(@RequestPart("avatarfile") MultipartFile avatarfile) { public R<AvatarVo> avatar(@RequestPart("avatarfile") MultipartFile avatarfile) {
if (ObjectUtil.isNotNull(avatarfile) && !avatarfile.isEmpty()) { if (ObjectUtil.isNotNull(avatarfile) && !avatarfile.isEmpty()) {
String extension = FileUtil.extName(avatarfile.getOriginalFilename()); String extension = FileUtil.extName(avatarfile.getOriginalFilename());
if (!StringUtils.equalsAnyIgnoreCase(extension, MimeTypeUtils.IMAGE_EXTENSION)) { if (!MimeTypeUtils.isImage(extension)) {
return R.fail("文件格式不正确,请上传" + Arrays.toString(MimeTypeUtils.IMAGE_EXTENSION) + "格式"); return R.fail("文件格式不正确,请上传" + Arrays.toString(MimeTypeUtils.IMAGE_EXTENSION) + "格式");
} }
SysOssVo oss = ossService.upload(avatarfile); SysOssVo oss = ossService.upload(avatarfile);
@@ -142,7 +142,8 @@ public class SysProfileController extends BaseController {
* *
* @param imgUrl 头像地址 * @param imgUrl 头像地址
*/ */
public record AvatarVo(String imgUrl) {} public record AvatarVo(String imgUrl) {
}
/** /**
* 用户个人信息 * 用户个人信息
@@ -151,7 +152,8 @@ public class SysProfileController extends BaseController {
* @param roleGroup 用户所属角色组 * @param roleGroup 用户所属角色组
* @param postGroup 用户所属岗位组 * @param postGroup 用户所属岗位组
*/ */
public record ProfileVo(ProfileUserVo user, String roleGroup, String postGroup) {} public record ProfileVo(ProfileUserVo user, String roleGroup, String postGroup) {
}
/** /**
* 用户密码修改 * 用户密码修改