From a4e8702dc0edeb3a03de6ecdd1c2b08c7151af7c Mon Sep 17 00:00:00 2001 From: chenxing Date: Sat, 10 Oct 2026 15:46:07 +0800 Subject: [PATCH] =?UTF-8?q?fix(file):=20=E9=99=84=E4=BB=B6=E5=AD=98?= =?UTF-8?q?=E5=82=A8=E6=A0=B9=E7=9B=AE=E5=BD=95=E4=BC=98=E5=85=88=E8=AF=BB?= =?UTF-8?q?=E5=B9=B3=E5=8F=B0=E6=A0=87=E5=87=86=E7=8E=AF=E5=A2=83=E5=8F=98?= =?UTF-8?q?=E9=87=8F=20FILE=5FUPLOAD=5FPATH=E2=80=94=E2=80=94=E4=BF=AE?= =?UTF-8?q?=E5=A4=8D=E7=94=9F=E4=BA=A7=E9=99=84=E4=BB=B6=E9=9A=8F=E5=AE=B9?= =?UTF-8?q?=E5=99=A8=E9=87=8D=E5=BB=BA=E4=B8=A2=E5=A4=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 生产容器 env 只有旧 dotnet 风格 FILE_PATH 顶层键(Spring 不识别),@Value(${file.upload-path}) 回落到打包默认 D:/data/upload,Linux 下被锚定为 /app/D:/data/upload 写进容器可写层, 每次 projman 重新部署附件全部丢失(2026-10 事故,卷里仅剩 9/1 前的 3 个文件)。 新优先级:FILE_UPLOAD_PATH 环境变量(子应用平台新标准,projman 注入 /data/upload) > file.upload-path(application.yml,仅本地 Windows 开发)> /data/upload 兜底。 deploy/notice.yaml 与 docker-compose.notice.yml 文档块同步更新。 --- .../java/com/yunhai/notice/service/impl/FileService.java | 9 ++++++++- src/main/resources/application.yml | 5 ++++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/yunhai/notice/service/impl/FileService.java b/src/main/java/com/yunhai/notice/service/impl/FileService.java index ec31a6c..08b4576 100644 --- a/src/main/java/com/yunhai/notice/service/impl/FileService.java +++ b/src/main/java/com/yunhai/notice/service/impl/FileService.java @@ -53,7 +53,14 @@ public class FileService implements IFileService { @Autowired private UpFileRepository upFileRepository; - @Value("${file.upload-path}") + /** + * 附件存储根目录(生产容器内 /data/upload,对应 projman 卷 /data/uploads/notice)。 + * 优先级:环境变量 FILE_UPLOAD_PATH(子应用平台新标准,projman 注入)> file.upload-path + * (application.yml 的 D:/data/upload,仅本地 Windows 开发用)> /data/upload 兜底。 + * 生产缺 FILE_UPLOAD_PATH 时曾回落到 D:/data/upload——Linux 下锚定为 /app/D:/data/upload + * 写进容器可写层,每次重新部署文件即丢(2026-10 事故),故 prod 必须注入该环境变量。 + */ + @Value("${FILE_UPLOAD_PATH:${file.upload-path:/data/upload}}") private String uploadPath; private static final String DEFAULT_APP_TYPE = "notice"; diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 7ccb0d9..56922fb 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -41,7 +41,10 @@ spring: simple: auto-startup: false -# 文件上传存储路径(Docker 部署时与 volume 挂载一致) +# 文件上传存储路径——仅供本地 Windows 开发兜底;生产以 projman 注入的环境变量 +# FILE_UPLOAD_PATH=/data/upload 为准(子应用平台新标准,卷 /data/uploads/notice 对应容器 /data/upload)。 +# 切勿在生产只依赖本键:历史教训是 Linux 容器把 D:/data/upload 锚定成 /app/D:/data/upload +# 写进容器可写层,每次更新部署附件全部丢失(2026-10)。 file: upload-path: D:/data/upload