From 94570cf23a0c81246703d109b0f66acb2afd94a2 Mon Sep 17 00:00:00 2001 From: ysn <2126564605@qq.com> Date: Thu, 4 Jun 2026 17:18:40 +0800 Subject: [PATCH] =?UTF-8?q?=E7=9F=A5=E8=AF=86=E5=BA=93-=E5=8A=9F=E8=83=BD?= =?UTF-8?q?=E8=81=94=E8=B0=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/views/knowledge/index.vue | 57 +++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) diff --git a/src/views/knowledge/index.vue b/src/views/knowledge/index.vue index bca0c03..e5543f5 100644 --- a/src/views/knowledge/index.vue +++ b/src/views/knowledge/index.vue @@ -659,6 +659,22 @@ export default { const file = event.target.files[0]; if (!file) return; + // 文件名校验 + const validateResult = this.validateFileName(file.name); + if (!validateResult.valid) { + this.$modal.msgError(validateResult.message); + event.target.value = ""; + return; + } + + // 文件大小校验(可选,根据需求启用) + // const sizeResult = this.validateFileSize(file.size); + // if (!sizeResult.valid) { + // this.$modal.msgError(sizeResult.message); + // event.target.value = ""; + // return; + // } + this.currentUploadFile = file; this.uploadProgressDialogVisible = true; this.uploadPercent = 0; @@ -672,6 +688,47 @@ export default { // 清空文件输入 event.target.value = ""; }, + // 文件名验证 + validateFileName(fileName) { + // 1. 检查文件名是否为空 + if (!fileName || fileName.trim() === "") { + return { valid: false, message: "文件名不能为空" }; + } + + // 2. 检查文件名长度(不含扩展名最多20字符) + const nameWithoutExt = fileName.replace(/\.[^/.]+$/, ""); + if (nameWithoutExt.length > 20) { + return { valid: false, message: "文件名(不含扩展名)不能超过20个字符" }; + } + + // 3. 检查是否以数字开头 + if (/^\d/.test(nameWithoutExt)) { + return { valid: false, message: "文件名不能以数字开头" }; + } + + // 4. 检查是否以特殊字符开头 + const specialChars = /^[!@#$%^&*()_+\-=\[\]{}|;:,.<>?~`]/; + if (specialChars.test(nameWithoutExt)) { + return { valid: false, message: "文件名不能以特殊字符开头" }; + } + + // 5. 检查是否包含特殊字符(Windows文件名限制) + const invalidChars = /[\\/:*?"<>|]/; + if (invalidChars.test(fileName)) { + return { valid: false, message: "文件名不能包含 \\ / : * ? \" < > | 等特殊字符" }; + } + + return { valid: true, message: "" }; + }, + // 文件大小验证(根据需求启用) + validateFileSize(size) { + // 例如:限制最大100MB + const maxSize = 100 * 1024 * 1024; + if (size > maxSize) { + return { valid: false, message: `文件大小不能超过100MB,当前文件大小:${(size / (1024 * 1024)).toFixed(2)}MB` }; + } + return { valid: true, message: "" }; + }, // 上传到 MinIO(支持 PDF 缩略图生成) async uploadToMinio(file, recordId) { try {