打包发布到服务器读取不到resources下的文件

本文介绍了如何在Java中使用ClassPathResource从类路径中读取文件,通过`InputStream`实现对templatePathName指定模板文件的访问。

传路径:

读取文件:

InputStream templateInputStream = new ClassPathResource(templatePathName).getInputStream();

Spring Boot 应用中,即使正确配置了 `spring.web.resources.static-locations`,仍然可能遇到无法访问资源文件的问题。以下是可能导致此问题的常见原因及解决方案。 ### 1. 配置路径拼写错误 确保使用的是正确的命名空间。从 Spring Boot 2.0 开始,`spring.resources` 已被弃用,应使用 `spring.web.resources`: ```yaml spring: web: resources: static-locations: classpath:/static/, file:/var/www/html/ ``` 若仍使用 `spring.resources.static-locations`,则配置不会生效[^2]。 ### 2. 文件路径未正确映射 Spring Boot 默认将 `/` 映射到静态资源目录,但若修改了 `spring.mvc.static-path-pattern`,可能会导致路径不匹配。例如: ```yaml spring: mvc: static-path-pattern: /resources/** ``` 此时必须通过 `/resources/xxx` 来访问资源,而不是直接 `/xxx` [^1]。 ### 3. 资源不在预期位置 若指定 `static-locations` 为自定义路径(如外部文件系统),需确认文件确实存在于该路径下。例如: ```yaml spring: web: resources: static-locations: file:/opt/www/ ``` 应确保 `/opt/www/` 下存在对应的资源文件,如 `/opt/www/images/logo.png` 可通过 `/images/logo.png` 访问[^3]。 ### 4. 打包方式影响资源访问 当项目打包为 `jar` 文件时,不能使用 `file:` 类型的路径来引用类路径资源。应改用 `classpath:` 前缀: ```yaml spring: web: resources: static-locations: classpath:/static/ ``` 若需要访问外部文件,应确保路径在运行环境中可访问,并且服务器具有相应权限读取该路径[^3]。 ### 5. 缓存或浏览器行为干扰 有时浏览器缓存可能导致旧的 404 页面被保留,尝试清除浏览器缓存或使用隐身模式重新访问资源。 ### 6. 自定义 WebMvcConfigurer 冲突 如果实现了 `WebMvcConfigurer` 接口并重写了 `addResourceHandlers` 方法,需确保其配置与 `static-locations` 不冲突。例如: ```java @Configuration public class WebConfig implements WebMvcConfigurer { @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { registry.addResourceHandler("/**") .addResourceLocations("classpath:/dist/"); } } ``` 若未正确配置,则可能导致资源路径无法解析,甚至首页 404 的问题[^4]。 ### 7. 检查日志输出 启动应用时,查看控制台日志是否有关于资源加载失败的信息。Spring Boot 通常会打印出它识别到的静态资源位置,可用于验证配置是否生效。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值