限制文件大小 20M

This commit is contained in:
silk 2026-06-15 12:03:44 +08:00
parent ff27395f3a
commit 333fb2e4a2
7 changed files with 34 additions and 27 deletions

View File

@ -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)")

View File

@ -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)")

View File

@ -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)

View File

@ -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

View File

@ -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
}

View File

@ -216,7 +216,7 @@
ref="fileInput"
>
</label>
<small class="upload-hint">支持 PDFDOCXExcelxlsx/xlsCSVTXT图片PNGJPGBMP格式单文件不超过 15MB提取正文不超过 300 万字过长请拆分</small>
<small class="upload-hint">支持 PDFDOCXExcelxlsx/xlsCSVTXT图片PNGJPGBMP格式单文件不超过 20MB提取正文不超过 300 万字过长请拆分</small>
</div>
<!-- URL 上传 -->
@ -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
}

View File

@ -219,7 +219,7 @@
class="form-control bg-dark text-white border-secondary"
@change="onFileSelect"
/>
<div class="mt-2 small text-muted">支持 .txt.pdf.docx 及常见图片扫描件将尝试 OCR + 通义视觉单文件不超过15MB提取正文不超过 300 万字过长请拆分</div> </div>
<div class="mt-2 small text-muted">支持 .txt.pdf.docx 及常见图片扫描件将尝试 OCR + 通义视觉单文件不超过 20MB提取正文不超过 300 万字过长请拆分</div> </div>
<div v-if="uploadError" class="alert alert-danger py-2 small">{{ uploadError }}</div>
</div>
<div class="modal-footer-custom">