diff --git a/docker-compose.yml b/docker-compose.yml index df094e5e..4a16eb32 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,7 +1,10 @@ services: frontend: image: wechatopenai/weknora-ui:latest - build: ./frontend + build: + context: ./frontend + args: + - MAX_FILE_SIZE_MB=${MAX_FILE_SIZE_MB:-50} container_name: WeKnora-frontend ports: - "${FRONTEND_PORT:-80}:80" diff --git a/frontend/Dockerfile b/frontend/Dockerfile index 6ecb5d36..73341a6f 100644 --- a/frontend/Dockerfile +++ b/frontend/Dockerfile @@ -7,6 +7,10 @@ WORKDIR /app ENV NODE_OPTIONS="--max-old-space-size=4096" ENV VITE_IS_DOCKER=true +# 文件大小限制(MB),通过构建参数传入 +ARG MAX_FILE_SIZE_MB=50 +ENV VITE_MAX_FILE_SIZE_MB=${MAX_FILE_SIZE_MB} + # 复制依赖文件 COPY package*.json ./ COPY packages/xlsx-0.20.2.tgz ./packages/xlsx-0.20.2.tgz diff --git a/frontend/src/utils/index.ts b/frontend/src/utils/index.ts index 181cd6b9..db9389bc 100644 --- a/frontend/src/utils/index.ts +++ b/frontend/src/utils/index.ts @@ -1,4 +1,9 @@ import { MessagePlugin } from "tdesign-vue-next"; + +// 从环境变量获取最大文件大小(MB),默认30MB +const MAX_FILE_SIZE_MB = Number(import.meta.env.VITE_MAX_FILE_SIZE_MB) || 50; +const MAX_FILE_SIZE_BYTES = MAX_FILE_SIZE_MB * 1024 * 1024; + export function generateRandomString(length: number) { let result = ""; const characters = @@ -33,16 +38,16 @@ export function kbFileTypeVerification(file: any, silent = false) { } if ( (type == "pdf" || type == "docx" || type == "doc") && - file.size > 31457280 + file.size > MAX_FILE_SIZE_BYTES ) { if (!silent) { - MessagePlugin.error("pdf/doc文件不能超过30M!"); + MessagePlugin.error(`pdf/doc文件不能超过${MAX_FILE_SIZE_MB}M!`); } return true; } - if ((type == "txt" || type == "md") && file.size > 31457280) { + if ((type == "txt" || type == "md") && file.size > MAX_FILE_SIZE_BYTES) { if (!silent) { - MessagePlugin.error("txt/md文件不能超过30M!"); + MessagePlugin.error(`txt/md文件不能超过${MAX_FILE_SIZE_MB}M!`); } return true; }