解决”重复文件名重命名“问题【根据Word系统方式】

提示:工作中遇到的功能需求,在此记录,不喜勿喷!谢谢

文章目录


前言

最近工作中遇到的我认为有必要记录的需求实现,希望可以帮助到有同样需求的小伙伴们!


提示:以下是本篇文章正文内容,下面案例可供参考

一、需求分析

编写代码过程中,往往需要考虑校验数据唯一性。Word系统的重命名规则为:第一个文件 测试.jpg-》第二个文件 测试 -副本.jpg-》第三个文件 测试 -副本(1).jpg-》第四个文件 测试 -副本(2).jpg,依次类推。

二、需求实现

代码实现

代码如下(示例):

c 复制代码
public Result<String> add(@RequestBody KfWangpan kfWangpan) {
		//获取入参中文件信息
        FileVo fileVo = kfWangpan.getFileVoList().get(0);
        //获取系统用户信息
        LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal();
        //查询该用户该资源类型下所有文件记录
        List<KfWangpan> list = kfWangpanService.lambdaQuery()
                .eq(KfWangpan::getResourceType, kfWangpan.getResourceType())
                .eq(KfWangpan::getCreateBy,user.getUsername())
                .list();
        //通过ArrayList收集重复文件名的数量
        ArrayList<String> strings = new ArrayList<>();
        //根据.分隔为两部分split[0]为文件名,split[1]为文件后缀名
        String[] split = fileVo.getResourceName().split("\\.");
        if (list.size()!=0) {
            //遍历文件记录,如果有该文件名,则随机生成UUID
            for (KfWangpan item : list) {
                if (item.getResourceName().split("\\.")[0].equals(split[0])||item.getResourceName().split("-")[0].equals(split[0])) {
                    UUID uuid = UUID.randomUUID();
                    strings.add(String.valueOf(uuid));
                }
            }
        }
        //遍历该文件名集合
        if (strings.size() == 1) {
            //数据库里有一条记录
            fileVo.setResourceName(split[0] + "-副本."+ split[1]);
        } else if (strings.size() >= 2) {
            //数据库里有两个以上的记录
            int count = strings.size() - 1;
            fileVo.setResourceName(split[0] + "-副本(" + count + ")."+split[1]);
        }
        kfWangpanService.add(kfWangpan);
        return Result.OK("添加成功!");
    }

相关推荐
斯维赤12 分钟前
限流、熔断、降级,你真的分得清吗?
java·后端·架构
aiks_yuan3 小时前
Java CPU 100% 怎么排查:JDK 11 起 jstack 自带线程 CPU 时间,不用再 top -H 换算十六进制(JDK 8、11、17 实测)
java
Flynn Liang4 小时前
AiServices 源码级拆解:一个接口如何变成 RAG Agent
java·langchain·源码分析·rag·langchain4j·aiservices
Flynn Liang5 小时前
LangChain4j 1.23 架构全景:Java 大模型应用的 6 层抽象
java·langchain·大模型·rag·ai agent·langchain4j
聪明的笨猪猪5 小时前
实际工程问题:AI生成Redis分布式锁的原子性缺陷导致库存超卖
java·经验分享·面试·ai编程
软件技术NINI6 小时前
基于SpringBoot和Vue的新能源汽车销售推荐系统
java·vue.js·spring boot·后端·汽车·毕业设计·毕设
Flynn Liang6 小时前
LangChain4j 生产级工程骨架:12 个模块 + Docker 一键启动
java·spring boot·langchain·rag·langchain4j
噢,我明白了8 小时前
JAVA中的一些基础应用知识点
java·开发语言
SL_staff8 小时前
私有化低代码不是妥协,而是企业级数字化的自主可控主航道
java
装不满的克莱因瓶8 小时前
【SpringAI Alibaba】ReactAgent结构化输出OutputType与OutputSchema实战
java·人工智能·ai·springai·springaialibaba