RuoYi
2022-02-25 1e67889d7cd4a9980e28c22563dc7ec0e081ca07
组件fileUpload支持多文件同时选择上传
已修改5个文件
已重命名2个文件
已添加1个文件
152 ■■■■■ 文件已修改
src/main/java/com/ruoyi/common/utils/StringUtils.java 49 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/common/utils/file/FileUploadUtils.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/common/utils/file/FileUtils.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/common/utils/uuid/IdUtils.java 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/common/utils/uuid/Seq.java 86 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/common/utils/uuid/UUID.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/framework/security/service/TokenService.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/project/common/CaptchaController.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/common/utils/StringUtils.java
@@ -531,4 +531,53 @@
    {
        return (T) obj;
    }
    /**
     * æ•°å­—左边补齐0,使之达到指定长度。注意,如果数字转换为字符串后,长度大于size,则只保留 æœ€åŽsize个字符。
     *
     * @param num æ•°å­—对象
     * @param size å­—符串指定长度
     * @return è¿”回数字的字符串格式,该字符串为指定长度。
     */
    public static final String padl(final Number num, final int size)
    {
        return padl(num.toString(), size, '0');
    }
    /**
     * å­—符串左补齐。如果原始字符串s长度大于size,则只保留最后size个字符。
     *
     * @param s åŽŸå§‹å­—ç¬¦ä¸²
     * @param size å­—符串指定长度
     * @param c ç”¨äºŽè¡¥é½çš„字符
     * @return è¿”回指定长度的字符串,由原字符串左补齐或截取得到。
     */
    public static final String padl(final String s, final int size, final char c)
    {
        final StringBuilder sb = new StringBuilder(size);
        if (s != null)
        {
            final int len = s.length();
            if (s.length() <= size)
            {
                for (int i = size - len; i > 0; i--)
                {
                    sb.append(c);
                }
                sb.append(s);
            }
            else
            {
                return s.substring(len - size, len);
            }
        }
        else
        {
            for (int i = size; i > 0; i--)
            {
                sb.append(c);
            }
        }
        return sb.toString();
    }
}
src/main/java/com/ruoyi/common/utils/file/FileUploadUtils.java
@@ -10,8 +10,8 @@
import com.ruoyi.common.exception.file.FileSizeLimitExceededException;
import com.ruoyi.common.exception.file.InvalidExtensionException;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.IdUtils;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.uuid.Seq;
import com.ruoyi.framework.config.RuoYiConfig;
/**
@@ -121,7 +121,8 @@
     */
    public static final String extractFilename(MultipartFile file)
    {
        return DateUtils.datePath() + "/" + IdUtils.fastUUID() + "." + getExtension(file);
        return StringUtils.format("{}/{}_{}.{}", DateUtils.datePath(),
                FilenameUtils.getBaseName(file.getOriginalFilename()), Seq.getId(Seq.uploadSeqType), getExtension(file));
    }
    public static final File getAbsoluteFile(String uploadDir, String fileName) throws IOException
src/main/java/com/ruoyi/common/utils/file/FileUtils.java
@@ -14,8 +14,8 @@
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.ArrayUtils;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.IdUtils;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.uuid.IdUtils;
import com.ruoyi.framework.config.RuoYiConfig;
/**
src/main/java/com/ruoyi/common/utils/uuid/IdUtils.java
ÎļþÃû´Ó src/main/java/com/ruoyi/common/utils/IdUtils.java ÐÞ¸Ä
@@ -1,6 +1,4 @@
package com.ruoyi.common.utils;
import com.ruoyi.common.core.lang.UUID;
package com.ruoyi.common.utils.uuid;
/**
 * ID生成器工具类
src/main/java/com/ruoyi/common/utils/uuid/Seq.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,86 @@
package com.ruoyi.common.utils.uuid;
import java.util.concurrent.atomic.AtomicInteger;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.StringUtils;
/**
 * @author ruoyi åºåˆ—生成类
 */
public class Seq
{
    // é€šç”¨åºåˆ—类型
    public static final String commSeqType = "COMMON";
    // ä¸Šä¼ åºåˆ—类型
    public static final String uploadSeqType = "UPLOAD";
    // é€šç”¨æŽ¥å£åºåˆ—æ•°
    private static AtomicInteger commSeq = new AtomicInteger(1);
    // ä¸Šä¼ æŽ¥å£åºåˆ—æ•°
    private static AtomicInteger uploadSeq = new AtomicInteger(1);
    // æœºå™¨æ ‡è¯†
    private static String machineCode = "A";
    /**
     * èŽ·å–é€šç”¨åºåˆ—å·
     *
     * @return åºåˆ—值
     */
    public static String getId()
    {
        return getId(commSeqType);
    }
    /**
     * é»˜è®¤16位序列号 yyMMddHHmmss + ä¸€ä½æœºå™¨æ ‡è¯† + 3长度循环递增字符串
     *
     * @return åºåˆ—值
     */
    public static String getId(String type)
    {
        AtomicInteger atomicInt = commSeq;
        if (uploadSeqType.equals(type))
        {
            atomicInt = uploadSeq;
        }
        return getId(atomicInt, 3);
    }
    /**
     * é€šç”¨æŽ¥å£åºåˆ—号 yyMMddHHmmss + ä¸€ä½æœºå™¨æ ‡è¯† + length长度循环递增字符串
     *
     * @param atomicInt åºåˆ—æ•°
     * @param length æ•°å€¼é•¿åº¦
     * @return åºåˆ—值
     */
    public static String getId(AtomicInteger atomicInt, int length)
    {
        String result = DateUtils.dateTimeNow();
        result += machineCode;
        result += getSeq(atomicInt, length);
        return result;
    }
    /**
     * åºåˆ—循环递增字符串[1, 10 çš„ (length)幂次方), ç”¨0左补齐length位数
     *
     * @return åºåˆ—值
     */
    private synchronized static String getSeq(AtomicInteger atomicInt, int length)
    {
        // å…ˆå–值再+1
        int value = atomicInt.getAndIncrement();
        // å¦‚果更新后值>=10 çš„ (length)幂次方则重置为1
        int maxSeq = (int) Math.pow(10, length);
        if (atomicInt.get() >= maxSeq)
        {
            atomicInt.set(1);
        }
        // è½¬å­—符串,用0左补齐
        return StringUtils.padl(value, length);
    }
}
src/main/java/com/ruoyi/common/utils/uuid/UUID.java
ÎļþÃû´Ó src/main/java/com/ruoyi/common/core/lang/UUID.java ÐÞ¸Ä
@@ -1,4 +1,4 @@
package com.ruoyi.common.core.lang;
package com.ruoyi.common.utils.uuid;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
src/main/java/com/ruoyi/framework/security/service/TokenService.java
@@ -8,11 +8,11 @@
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import com.ruoyi.common.constant.Constants;
import com.ruoyi.common.utils.IdUtils;
import com.ruoyi.common.utils.ServletUtils;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.ip.AddressUtils;
import com.ruoyi.common.utils.ip.IpUtils;
import com.ruoyi.common.utils.uuid.IdUtils;
import com.ruoyi.framework.redis.RedisCache;
import com.ruoyi.framework.security.LoginUser;
import eu.bitwalker.useragentutils.UserAgent;
src/main/java/com/ruoyi/project/common/CaptchaController.java
@@ -13,8 +13,8 @@
import org.springframework.web.bind.annotation.RestController;
import com.google.code.kaptcha.Producer;
import com.ruoyi.common.constant.Constants;
import com.ruoyi.common.utils.IdUtils;
import com.ruoyi.common.utils.sign.Base64;
import com.ruoyi.common.utils.uuid.IdUtils;
import com.ruoyi.framework.redis.RedisCache;
import com.ruoyi.framework.web.domain.AjaxResult;
import com.ruoyi.project.system.service.ISysConfigService;