diff --git a/backend/api/chat_file.py b/backend/api/chat_file.py index f901f7d..5731284 100644 --- a/backend/api/chat_file.py +++ b/backend/api/chat_file.py @@ -13,6 +13,7 @@ from utils.helpers import BaseResponse from logger.logging import get_logger from core.dependencies import get_current_user from models.user import User +from core.config import settings from core.database import get_db_pool from services.chat_thread_file_service import ChatThreadFileService from services.vector_service import get_vector_service @@ -247,11 +248,6 @@ async def process_chat_file_background( except: pass - # 限制内容长度,避免 token 超限 - max_content_length = 10000 # 约 3000-4000 tokens - if len(file_content) > max_content_length: - file_content = file_content[:max_content_length] + "..." - logger.info(f"正在为文件 {file_id} 生成摘要,内容长度: {len(file_content)} 字符") # 将文本内容转换为 Document 对象 @@ -429,13 +425,16 @@ async def upload_chat_file( file_size = len(content) file_size_mb = file_size / (1024 * 1024) - # 检查文件大小(限制 15MB) - MAX_FILE_SIZE = 15 * 1024 * 1024 # 15MB - if file_size > MAX_FILE_SIZE: - logger.warning(f"❌ 文件大小超限: {file_size_mb:.2f}MB (最大 15MB), 文件: {file.filename}") + # 检查文件大小 + max_file_size = settings.max_upload_file_bytes + max_file_size_mb = max_file_size / (1024 * 1024) + if file_size > max_file_size: + logger.warning( + f"❌ 文件大小超限: {file_size_mb:.2f}MB (最大 {max_file_size_mb:.0f}MB), 文件: {file.filename}" + ) raise HTTPException( status_code=status.HTTP_400_BAD_REQUEST, - detail=f"文件大小超过限制,当前: {file_size_mb:.2f}MB,最大允许: 15MB" + detail=f"文件大小超过限制,当前: {file_size_mb:.2f}MB,最大允许: {max_file_size_mb:.0f}MB" ) logger.info(f"✅ 文件大小验证通过: {file_size_mb:.2f}MB ({file_size} bytes)") diff --git a/backend/api/kb_file_router.py b/backend/api/kb_file_router.py index 6790db3..f682ba8 100644 --- a/backend/api/kb_file_router.py +++ b/backend/api/kb_file_router.py @@ -340,11 +340,16 @@ async def upload_file( file_size = len(content) file_size_mb = file_size / (1024 * 1024) - # 检查文件大小(限制 15MB) - MAX_FILE_SIZE = 15 * 1024 * 1024 # 15MB - if file_size > MAX_FILE_SIZE: - logger.warning(f"❌ 文件大小超限: {file_size_mb:.2f}MB (最大 15MB), 文件: {file.filename}") - raise BadRequestError(f"文件大小超过限制,当前: {file_size_mb:.2f}MB,最大允许: 15MB") + # 检查文件大小 + max_file_size = settings.max_upload_file_bytes + max_file_size_mb = max_file_size / (1024 * 1024) + if file_size > max_file_size: + logger.warning( + f"❌ 文件大小超限: {file_size_mb:.2f}MB (最大 {max_file_size_mb:.0f}MB), 文件: {file.filename}" + ) + raise BadRequestError( + f"文件大小超过限制,当前: {file_size_mb:.2f}MB,最大允许: {max_file_size_mb:.0f}MB" + ) logger.info(f"✅ 文件大小验证通过: {file_size_mb:.2f}MB ({file_size} bytes)") diff --git a/backend/api/knowledge_graph_router.py b/backend/api/knowledge_graph_router.py index 724896e..941ea8e 100644 --- a/backend/api/knowledge_graph_router.py +++ b/backend/api/knowledge_graph_router.py @@ -31,8 +31,6 @@ logger = get_logger(__name__) knowledge_graph_router = APIRouter(prefix="/api/knowledge-graph", tags=["知识图谱"]) -MAX_UPLOAD_BYTES = 15 * 1024 * 1024 - async def _knowledge_graph_build_task(record_id: int, neo4j_gid: str, text: str) -> None: pool = await get_db_pool() @@ -135,8 +133,10 @@ async def create_knowledge_graph( raise HTTPException(status_code=400, detail="请上传文件") raw = await file.read() - if len(raw) > MAX_UPLOAD_BYTES: - raise HTTPException(status_code=400, detail="文件过大,请控制在 15MB 以内") + max_upload_bytes = settings.max_upload_file_bytes + max_upload_mb = max_upload_bytes / (1024 * 1024) + if len(raw) > max_upload_bytes: + raise HTTPException(status_code=400, detail=f"文件过大,请控制在 {max_upload_mb:.0f}MB 以内") try: text = await extract_knowledge_document_text(file.filename, raw) diff --git a/backend/core/config.py b/backend/core/config.py index 43f7a35..1ec048c 100644 --- a/backend/core/config.py +++ b/backend/core/config.py @@ -83,6 +83,9 @@ class Settings(BaseSettings): # HTTPX 配置 httpx_default_timeout: float = 300.0 + # 文件上传(知识库、聊天、知识图谱等共用) + max_upload_file_bytes: int = 20 * 1024 * 1024 # 单文件上限 20MB + # Redis 配置 redis_host: str = "127.0.0.1" redis_port: int = 6379 diff --git a/frontend/src/views/Chat.vue b/frontend/src/views/Chat.vue index 1d5cd50..b5cb895 100644 --- a/frontend/src/views/Chat.vue +++ b/frontend/src/views/Chat.vue @@ -2114,10 +2114,10 @@ function handleFileSelect(event) { return } - // 检查文件大小(100MB) - const maxSize = 100 * 1024 * 1024 + // 检查文件大小(20MB) + const maxSize = 20 * 1024 * 1024 if (file.size > maxSize) { - alert('文件大小不能超过 100MB') + alert('文件大小不能超过 20MB') event.target.value = '' return } diff --git a/frontend/src/views/KnowledgeBase.vue b/frontend/src/views/KnowledgeBase.vue index b027d5f..64a53a6 100644 --- a/frontend/src/views/KnowledgeBase.vue +++ b/frontend/src/views/KnowledgeBase.vue @@ -216,7 +216,7 @@ ref="fileInput" > - 支持 PDF、DOCX、Excel(xlsx/xls)、CSV、TXT、图片(PNG、JPG、BMP)格式,单文件不超过 15MB,提取正文不超过 300 万字(过长请拆分) + 支持 PDF、DOCX、Excel(xlsx/xls)、CSV、TXT、图片(PNG、JPG、BMP)格式,单文件不超过 20MB,提取正文不超过 300 万字(过长请拆分) @@ -1103,10 +1103,10 @@ function handleFileSelect(event) { return } - // 检查文件大小(限制 100MB) - const maxSize = 100 * 1024 * 1024 + // 检查文件大小(限制 20MB) + const maxSize = 20 * 1024 * 1024 if (file.size > maxSize) { - alert('文件大小不能超过 100MB') + alert('文件大小不能超过 20MB') event.target.value = '' return } diff --git a/frontend/src/views/KnowledgeGraph.vue b/frontend/src/views/KnowledgeGraph.vue index 7e62590..6895955 100644 --- a/frontend/src/views/KnowledgeGraph.vue +++ b/frontend/src/views/KnowledgeGraph.vue @@ -219,7 +219,7 @@ class="form-control bg-dark text-white border-secondary" @change="onFileSelect" /> -
支持 .txt、.pdf、.docx 及常见图片;扫描件将尝试 OCR + 通义视觉。单文件不超过约 15MB,提取正文不超过 300 万字(过长请拆分)
+
支持 .txt、.pdf、.docx 及常见图片;扫描件将尝试 OCR + 通义视觉。单文件不超过 20MB,提取正文不超过 300 万字(过长请拆分)
{{ uploadError }}