Spring Boot配置后访问本地目录静态图片返回404如何解决?
问题原因
- 核心原因是Windows系统下file协议路径拼接错误:你当前代码拼接的静态资源路径格式为
file:/D:\xxx\diplomna\,不符合Windows系统file协议要求的file:///盘符:/路径/格式,Spring Boot无法解析到正确的本地文件位置。 - 次要可能原因:
- IDE启动的工作目录配置错误,导致
Paths.get("diplomna")获取到的不是项目根目录下的diplomna文件夹路径 - Spring Security配置类未加
@EnableWebSecurity或@Configuration注解,放行规则未生效 - 本地图片实际路径与预期不符,文件不存在
- IDE启动的工作目录配置错误,导致
解决方案
1. 修复静态资源映射代码(最优,跨平台适配)
不要手动拼接file协议路径,直接使用Path.toUri().toString()自动生成符合当前系统的协议路径,修改后的exposeDirectory方法如下:
private void exposeDirectory(String dirName, ResourceHandlerRegistry registry) { Path uploadDir = Paths.get(dirName); if (dirName.startsWith("../")) dirName = dirName.replace("../", ""); // 改为自动生成符合系统要求的file协议路径 registry.addResourceHandler("/" + dirName + "/**") .addResourceLocations(uploadDir.toUri().toString()); }
2. 验证路径正确性
在exposeDirectory方法中增加日志打印,确认映射的本地路径是否正确:
System.out.println("静态资源映射规则:/" + dirName + "/** -> " + uploadDir.toUri().toString());
启动项目后检查控制台输出,确认对应的本地路径是file:///D:/你的项目所在目录/diplomna/即可。
3. 排查IDE工作目录配置
如果使用IDEA等IDE启动项目,打开启动配置页,确认Working directory配置为当前项目的根目录,避免Paths.get("diplomna")读取到错误的路径。
4. 验证Spring Security配置
确认你的Security配置类上加了@Configuration和@EnableWebSecurity注解,保证/diplomna/**的放行规则生效。
内容的提问来源于stack exchange,提问作者agunimonx1
相关产品推荐
相关产品推荐

