当前位置: 首页 > article >正文

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

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

文章目录

  • 前言
  • 一、需求分析
  • 二、需求实现


前言

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


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

一、需求分析

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

二、需求实现

代码实现

代码如下(示例):

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("添加成功!");
    }


http://www.kler.cn/a/389887.html

相关文章:

  • 实验一:自建Docker注册中心
  • git commit 校验
  • 【设计模式】关联关系与依赖关系
  • RAFT: Recurrent All-Pairs Field Transforms for Optical Flow用于光流估计的循环全对场变换
  • 给查询业务添加redis缓存和缓存更新策略
  • 【韩老师零基础30天学会Java 】07章 面向对象编程(基础)
  • Qt文件系统-二进制文件读写
  • 【Django】Clickjacking点击劫持攻击实现和防御措施
  • 数组类算法【leetcode】
  • 「IDE」VS2022插件 Visual Assist X 番茄助手介绍说明
  • Python小游戏24——小恐龙躲避游戏
  • 使用 Elasticsearch 构建食谱搜索(一)
  • RSTP的配置
  • DNS Resolver解析服务器出口IP查询
  • 2024 年 Apifox 和 Postman 对比介绍详细版
  • vue3 动态路由+动态组件+缓存应用
  • 华为数通HCIA系列第5次考试-【2024-46周-周一】
  • 吴恩达深度学习笔记:卷积神经网络(Foundations of Convolutional Neural Networks)4.9-4.10
  • 计算机课程管理:Spring Boot实现的工程认证框架
  • 基于FPGA FPD-Link(LVDS7:1)与FPD-Link IIIII实现与定制
  • 人才流失预测模型(机器学习)
  • SpringBoot中的响应式编程和WebFlux入门
  • Unity——配置文件的使用
  • ceph介绍和搭建
  • 无人驾驶汽车——AI技术在交通领域的进展与未来展望
  • C语言 | Leetcode C语言题解之第560题和为K的子数组