fix: prioritize filename extension in materialTypeFromMime for .md files

.md files are uploaded as text/plain mime, causing materialTypeFromMime
to return .text instead of .markdown. Extension now checked first.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
wangdl 2026-06-19 11:40:22 +08:00
parent 4059f0197e
commit 88babf14f8

View File

@ -265,7 +265,7 @@ struct LibraryDetailPage: View {
NavigationLink(value: Route.materialReader( NavigationLink(value: Route.materialReader(
materialId: src.id, materialId: src.id,
filePath: "", filePath: "",
materialType: materialTypeFromMime(src.mimeType), materialType: materialTypeFromMime(src.mimeType, filename: src.originalFilename),
knowledgeBaseId: knowledgeBaseId, knowledgeBaseId: knowledgeBaseId,
title: src.originalFilename ?? src.title ?? "未命名" title: src.originalFilename ?? src.title ?? "未命名"
)) { )) {
@ -1496,7 +1496,16 @@ struct EditKnowledgePage: View {
// MARK: - Helpers // MARK: - Helpers
private func materialTypeFromMime(_ mime: String?) -> MaterialType { private func materialTypeFromMime(_ mime: String?, filename: String? = nil) -> MaterialType {
let ext = filename?.split(separator: ".").last?.lowercased()
// Extension takes priority for known types
if ext == "md" || ext == "markdown" { return .markdown }
if ext == "pdf" { return .pdf }
if ext == "epub" { return .epub }
if ext == "docx" || ext == "doc" { return .word }
if ext == "xlsx" || ext == "xls" { return .excel }
if ext == "pptx" || ext == "ppt" { return .powerPoint }
// Fallback to mime
guard let m = mime?.lowercased() else { return .markdown } guard let m = mime?.lowercased() else { return .markdown }
if m.contains("pdf") { return .pdf } if m.contains("pdf") { return .pdf }
if m.contains("epub") { return .epub } if m.contains("epub") { return .epub }