diff --git a/docker/Dockerfile b/docker/Dockerfile index 8bdad47..235f598 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -13,6 +13,11 @@ RUN apt-get update \ WORKDIR /app COPY target/app.jar /app/app.jar +# 镜像内 application-prod.yml 仅作「nacos 不可达时的兜底默认」; +# 正常启动由 bootstrap.yml 从 nacos 拉取线上配置(dataId=userhome.yaml)后覆盖。 +COPY docker/application-prod.yml /app/config/application-prod.yml +# 上传文件落容器卷,compose 里挂到宿主机 ./upload-data +RUN mkdir -p /data/upload EXPOSE 10000 -ENTRYPOINT ["sh", "-c", "java ${JAVA_OPTS:--Xms512m -Xmx1024m} -Dfile.encoding=UTF-8 -jar /app/app.jar"] +ENTRYPOINT ["sh", "-c", "java ${JAVA_OPTS:--Xms512m -Xmx1024m} -Dfile.encoding=UTF-8 -jar /app/app.jar --spring.profiles.active=prod"] diff --git a/src/main/java/com/yunhai/userhome/config/WebMvcConfig.java b/src/main/java/com/yunhai/userhome/config/WebMvcConfig.java new file mode 100644 index 0000000..1d7bf82 --- /dev/null +++ b/src/main/java/com/yunhai/userhome/config/WebMvcConfig.java @@ -0,0 +1,42 @@ +package com.yunhai.userhome.config; + +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; + +import java.io.File; + +/** + * Web MVC 配置:将上传文件目录映射为静态资源,使 /upload/** URL 可直接访问磁盘文件。 + * + *
对齐 UserBase 的 MyWebAppConfigurer:按子目录分别映射, + * UserHome 当前使用 icon(图标上传)和 wallpaper(壁纸上传)两个子目录。 + * + *
背景:UserSettingsController 的 iconUpload / wallpaperUpload 将文件保存到 + * ${FILE_PATH}/${子目录}/,返回 URL 如 /upload/icon/xxx.svg, + * 但 Spring Boot 默认不映射工作目录下的文件夹为静态资源,导致 404。 + */ +@Configuration +public class WebMvcConfig implements WebMvcConfigurer { + + @Value("${FILE_PATH:./upload/}") + private String FILE_PATH; + + @Override + public void addResourceHandlers(ResourceHandlerRegistry registry) { + // 转为绝对路径,避免相对路径在不同工作目录下解析不一致 + String basePath = new File(FILE_PATH).getAbsolutePath().replace("\\", "/"); + if (!basePath.endsWith("/")) { + basePath += "/"; + } + + // icon 子目录:/upload/icon/** → ${FILE_PATH}/icon/ + registry.addResourceHandler("/upload/icon/**") + .addResourceLocations("file:" + basePath + "icon/"); + + // wallpaper 子目录:/upload/wallpaper/** → ${FILE_PATH}/wallpaper/ + registry.addResourceHandler("/upload/wallpaper/**") + .addResourceLocations("file:" + basePath + "wallpaper/"); + } +} diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 187c31f..a632cb4 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -69,8 +69,10 @@ logging: # ===== 文件上传与学校配置 ===== # 文件存储根目录(UserSettingsController 壁纸/图标上传使用) +# 本地默认 ./upload/(相对工作目录);生产由 Nacos 覆盖为 /data/upload(容器卷挂载到宿主机) FILE_PATH: ./upload/ -# 文件 Web 访问前缀(prod 由 Nacos 覆盖) +# 文件 Web 访问前缀(拼接壁纸完整 URL 用,见 UserSettingsController.getUserWallpaperList) +# 本地 http://localhost:8070/upload/;生产由 Nacos 覆盖为 http://home.yunhaixingtong.com/userhome/upload/ FILE_WEB_PATH: http://localhost:8070/upload/ # 学校配置接口基址(SchSettingsController 使用,prod 由 Nacos 覆盖) SCH_CONF_URL: ""