feat(AI资源广场): 模型和数据集资源相关功能开发

检索根目录README.md文件时需要忽略大小写
This commit is contained in:
otto 2026-05-18 10:01:26 +08:00
parent 084042891d
commit fac5f3158f
1 changed files with 25 additions and 4 deletions

View File

@ -195,16 +195,37 @@ public class AiSkillParseServiceImpl implements IAiSkillParseService {
}
private String findAndReadReadmeMd(ZipFile zf, List<FileTreeNode> nodes) throws IOException {
// 优先查找根目录 README.md
ZipArchiveEntry readmeEntry = zf.getEntry(README_MD_FILE);
// 优先查找根目录 README.md忽略大小写
Enumeration<ZipArchiveEntry> entries = zf.getEntries();
ZipArchiveEntry readmeEntry = null;
// 查找根目录下的 README.md
while (entries.hasMoreElements()) {
ZipArchiveEntry entry = entries.nextElement();
String fileName = new File(entry.getName()).getName();
if (README_MD_FILE.equalsIgnoreCase(fileName) && entry.getName().indexOf('/') == -1) {
readmeEntry = entry;
break;
}
}
if (readmeEntry != null && !readmeEntry.isDirectory()) {
return readZipEntryContent(zf, readmeEntry);
}
// 其次查找顶层唯一文件夹下的 README.md
// 其次查找顶层唯一文件夹下的 README.md忽略大小写
String topFolder = findSingleTopFolder(nodes);
if (topFolder != null) {
readmeEntry = zf.getEntry(topFolder + "/" + README_MD_FILE);
entries = zf.getEntries(); // 重置枚举
while (entries.hasMoreElements()) {
ZipArchiveEntry entry = entries.nextElement();
String expectedPath = topFolder + "/" + README_MD_FILE;
if (expectedPath.equalsIgnoreCase(entry.getName())) {
readmeEntry = entry;
break;
}
}
if (readmeEntry != null && !readmeEntry.isDirectory()) {
return readZipEntryContent(zf, readmeEntry);
}