public ResponseFileUpload checkNameAndCreateNewFileName(String fileName, FileBreakpointUploadCondition condition) { String nameLockKey = REDIS_KEY_4_UPLOAD_CHECK_REPEAT + condition.getProjectId() + "-" + condition.getFolderId() + "-" + fileName; if (redisService.setNxMillSec(nameLockKey, ConstantUtil.LOCK, redisLockKeyExpire4UploadCheckRepeat)) { try { Long folderId = condition.getFolderId(); //查询文件夹下的所有最高版本文件 List<DocumentTreeVO> docList = designModelService.searchDocumentTree(condition.getProjectId(), folderId); //重名文件添加后缀 String newFileName = getNewFileName(fileName, docList); //修改文件名称 condition.setFileName(newFileName); } catch (Exception e) { log.error("DesignDocumentService.checkNameAndCreateNewFileName,异常。{}", e.getMessage()); } finally { redisService.del(nameLockKey); } return null; } else { try { Thread.sleep(10L); } catch (InterruptedException e) { log.error("", e); } return checkNameAndCreateNewFileName(fileName, condition); } }
时间: 2024-02-10 19:34:36 浏览: 36
cpp_redis修改源码之后的版本vs2015,解决不能在xp环境上面运行
这段代码是用来检查文件名是否重复并且创建新文件名的方法。它的输入参数包括文件名 `fileName` 和文件上传的条件 `condition`,返回类型为 `ResponseFileUpload`。具体实现步骤如下:
1. 构造一个 Redis 的锁 key,用来解决多个线程同时检查文件名重复的问题。
2. 通过 Redis 的 setNxMillSec() 方法获取锁,设置锁的过期时间。如果获取到锁,则执行下一步操作;否则等待 10 毫秒后重新执行该方法。
3. 通过调用 `designModelService.searchDocumentTree()` 方法查询指定文件夹下的所有最高版本文件。
4. 调用 `getNewFileName()` 方法获取一个新的文件名,如果文件名与已有文件重复,则在文件名后面添加一个数字后缀。
5. 将新的文件名设置到条件 `condition` 中。
6. 执行完毕后释放 Redis 锁。
注意:该方法可能会抛出异常,需要进行异常处理。
阅读全文