解决”重复文件名重命名“问题【根据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("添加成功!");
}