删除上传的工程文件。

This commit is contained in:
chenxudong 2025-05-15 14:21:35 +08:00
parent c6dcd99afb
commit 95a82bb69c
1 changed files with 70 additions and 60 deletions

View File

@ -1565,69 +1565,79 @@ public class EdFileInfoServiceImpl extends ServiceImpl<EdFileInfoMapper, EdFileI
} }
private void updateImportPrj2FileSystem(MultipartFile file, String prjId) throws IOException { private void updateImportPrj2FileSystem(MultipartFile file, String prjId) throws IOException {
String orgName = file.getOriginalFilename(); String tmpZipFile = null;
String tmpZipFile = elePropertyConfig.getEleTmpPath() + File.separator + orgName; String destDir = null;
String mainName = FileUtil.mainName(orgName);
FileUtil.del(tmpZipFile);
FileUtil.writeFromStream(file.getInputStream(), tmpZipFile);
String destDir = elePropertyConfig.getEleTmpPath() + File.separator + IdUtil.fastSimpleUUID();
try { try {
ZipUtil.unzip(tmpZipFile, destDir, StandardCharsets.UTF_8); String orgName = file.getOriginalFilename();
} catch (Exception e) { tmpZipFile = elePropertyConfig.getEleTmpPath() + File.separator + orgName;
ZipUtil.unzip(tmpZipFile, destDir, Charset.forName("GBK")); String mainName = FileUtil.mainName(orgName);
} FileUtil.del(tmpZipFile);
FileUtil.writeFromStream(file.getInputStream(), tmpZipFile);
File file1 = Objects.requireNonNull(new File(destDir).listFiles())[0]; destDir = elePropertyConfig.getEleTmpPath() + File.separator + IdUtil.fastSimpleUUID();
FileUtil.rename(file1, mainName, true); try {
List<EdFileInfo> edFileInfos = this.baseMapper.selectList(Wrappers.lambdaQuery(EdFileInfo.class) ZipUtil.unzip(tmpZipFile, destDir, StandardCharsets.UTF_8);
.eq(EdFileInfo::getEffectFlag, EffectFlagEnum.EFFECT.code) } catch (Exception e) {
.likeRight(EdFileInfo::getFilePath, prjId + MYSQL_FILE_PATH_SPLIT) ZipUtil.unzip(tmpZipFile, destDir, Charset.forName("GBK"));
.eq(EdFileInfo::getDataOwn, DataOwnEnum.SYS_PRJ.code));
Map<String, String> idNameMap = edFileInfos.stream().collect(Collectors.toMap(EdFileInfo::getId, EdFileInfo::getFileName));
idNameMap.put(prjId, mainName);
Map<String, EdFileInfo> filePathMap = new HashMap<>();
for (EdFileInfo edFileInfo : edFileInfos) {
StringBuilder names = new StringBuilder();
for (String id : edFileInfo.getFilePath().split(MYSQL_FILE_PATH_SPLIT)) {
String name = idNameMap.get(id);
names.append(MYSQL_FILE_PATH_SPLIT).append(name);
} }
filePathMap.put(names.substring(1), edFileInfo);
}
List<File> files = FileUtil.loopFiles(destDir); File file1 = Objects.requireNonNull(new File(destDir).listFiles())[0];
String tmpPath = FileUtil.normalize(destDir); FileUtil.rename(file1, mainName, true);
for (File importFile : files) { List<EdFileInfo> edFileInfos = this.baseMapper.selectList(Wrappers.lambdaQuery(EdFileInfo.class)
Assert.isTrue(EleCommonUtil.isFileNameValid(importFile.getName()), "文件名称不符合规范"); .eq(EdFileInfo::getEffectFlag, EffectFlagEnum.EFFECT.code)
String parentDir = FileUtil.normalize(importFile.getParent()); .likeRight(EdFileInfo::getFilePath, prjId + MYSQL_FILE_PATH_SPLIT)
String relativeFilePath = parentDir.replace(tmpPath, ""); .eq(EdFileInfo::getDataOwn, DataOwnEnum.SYS_PRJ.code));
String fileType = FileUtil.getSuffix(importFile.getName()); Map<String, String> idNameMap = edFileInfos.stream().collect(Collectors.toMap(EdFileInfo::getId, EdFileInfo::getFileName));
relativeFilePath = relativeFilePath.startsWith("/") ? relativeFilePath.substring(1) : relativeFilePath; idNameMap.put(prjId, mainName);
relativeFilePath = relativeFilePath.replace("/", MYSQL_FILE_PATH_SPLIT); Map<String, EdFileInfo> filePathMap = new HashMap<>();
EdFileInfo edFileInfo = filePathMap.get(relativeFilePath); for (EdFileInfo edFileInfo : edFileInfos) {
Assert.notNull(edFileInfo, "导入的工程与定义的层级结构不一致"); StringBuilder names = new StringBuilder();
String id = edFileInfo.getId(); for (String id : edFileInfo.getFilePath().split(MYSQL_FILE_PATH_SPLIT)) {
EdFileInfo newEdFileInfo = new EdFileInfo(); String name = idNameMap.get(id);
newEdFileInfo.newInit(); names.append(MYSQL_FILE_PATH_SPLIT).append(name);
String fileCode = commonService.createFileCode(id, fileType, FILE_START_VERSION, newEdFileInfo.getFileTime()); }
newEdFileInfo.setParentId(id) filePathMap.put(names.substring(1), edFileInfo);
.setFileCode(fileCode) }
.setSaveStatus(EleDataSaveStatusEnum.SUCCESS.code)
.setDataOwn(DataOwnEnum.SYS_FILE.code) List<File> files = FileUtil.loopFiles(destDir);
.setFileName(FileUtil.mainName(importFile)) String tmpPath = FileUtil.normalize(destDir);
.setFileContent(EleCommonUtil.parse(FileUtil.getInputStream(importFile), fileType)) for (File importFile : files) {
.setFileType(fileType) Assert.isTrue(EleCommonUtil.isFileNameValid(importFile.getName()), "文件名称不符合规范");
.setFileVersion(FILE_START_VERSION) String parentDir = FileUtil.normalize(importFile.getParent());
.setFileSize(importFile.length()) String relativeFilePath = parentDir.replace(tmpPath, "");
.setFilePath(edFileInfo.getFilePath() + MYSQL_FILE_PATH_SPLIT + newEdFileInfo.getId()) String fileType = FileUtil.getSuffix(importFile.getName());
.setDataType(EleDataTypeEnum.FILE.code) relativeFilePath = relativeFilePath.startsWith("/") ? relativeFilePath.substring(1) : relativeFilePath;
.setDataStatus(PublishEnum.PUBLISHED.getCode()) relativeFilePath = relativeFilePath.replace("/", MYSQL_FILE_PATH_SPLIT);
.setEffectFlag(EffectFlagEnum.EFFECT.code); EdFileInfo edFileInfo = filePathMap.get(relativeFilePath);
this.baseMapper.insert(newEdFileInfo); Assert.notNull(edFileInfo, "导入的工程与定义的层级结构不一致");
String destPath = commonService.getPrjRootPath1(DataOwnEnum.SYS_FILE.code) + File.separator + newEdFileInfo.getId(); String id = edFileInfo.getId();
FileUtil.move(importFile, new File(destPath), false); EdFileInfo newEdFileInfo = new EdFileInfo();
EleCommonUtil.encryptFile(destPath, SecureUtil.aes(FILE_SEC_PASSWD.getBytes())); newEdFileInfo.newInit();
UserThreadLocal.setSuccessInfo(newEdFileInfo.getParentId(), newEdFileInfo.getId(), "解析导入的工程文件成功,导入的工程名为 {},文件名为 {}", orgName, importFile.getName()); String fileCode = commonService.createFileCode(id, fileType, FILE_START_VERSION, newEdFileInfo.getFileTime());
newEdFileInfo.setParentId(id)
.setFileCode(fileCode)
.setSaveStatus(EleDataSaveStatusEnum.SUCCESS.code)
.setDataOwn(DataOwnEnum.SYS_FILE.code)
.setFileName(FileUtil.mainName(importFile))
.setFileContent(EleCommonUtil.parse(FileUtil.getInputStream(importFile), fileType))
.setFileType(fileType)
.setFileVersion(FILE_START_VERSION)
.setFileSize(importFile.length())
.setFilePath(edFileInfo.getFilePath() + MYSQL_FILE_PATH_SPLIT + newEdFileInfo.getId())
.setDataType(EleDataTypeEnum.FILE.code)
.setDataStatus(PublishEnum.PUBLISHED.getCode())
.setEffectFlag(EffectFlagEnum.EFFECT.code);
this.baseMapper.insert(newEdFileInfo);
String destPath = commonService.getPrjRootPath1(DataOwnEnum.SYS_FILE.code) + File.separator + newEdFileInfo.getId();
FileUtil.move(importFile, new File(destPath), false);
EleCommonUtil.encryptFile(destPath, SecureUtil.aes(FILE_SEC_PASSWD.getBytes()));
UserThreadLocal.setSuccessInfo(newEdFileInfo.getParentId(), newEdFileInfo.getId(), "解析导入的工程文件成功,导入的工程名为 {},文件名为 {}", orgName, importFile.getName());
}
} catch (Exception e) {
String info = "上传失败,原因 " + e.getMessage();
throw new BizException(info, e);
} finally {
FileUtil.del(destDir);
FileUtil.del(tmpZipFile);
} }
} }