Spring Boot如何在静态资源位置中添加目录及子目录
Hey there! Let's tackle this issue where you can access files in your root external resource folder but not its subdirectories. I've run into this a few times, so here's what you need to check:
1. Double-Check Your Access Paths
First off, make sure you're accessing the subdirectory files correctly. Since you've added C:/custResources/ as a static location, Spring Boot treats this folder as part of its root static resource path.
For example, if you have a file at C:/custResources/1/photo.jpg, you should access it via:http://your-server:port/1/photo.jpg
Don't add custResources to the URL — that's a common mistake!
2. Standardize Your File Path Configuration
Your current path file:/C:/custResources/ works, but switching to the more standard Windows file URI format can avoid subtle issues. Update your application.properties line to:
spring.resources.static-locations=classpath:/META-INF/resources/,classpath:/resources/,classpath:/static/,classpath:/public/,file:///C:/custResources/
Notice the triple slash (file:///) — this is the proper way to reference local Windows paths in Spring.
3. Ensure Correct Static Resource Mapping
By default, Spring Boot uses /** as the static path pattern, but if you've modified this elsewhere, it might block subdirectory access. Add this line to your application.properties to reset it:
spring.mvc.static-path-pattern=/**
This tells Spring to map all requests to your static resource locations, including subdirectories.
4. Check Spring Security (If You're Using It)
If you have Spring Security enabled, it might be blocking access to your subdirectory paths. You need to explicitly allow these routes in your security configuration.
For Spring Security 5.7+ (Lambda Style):
@Configuration public class SecurityConfig { @Bean public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { http.authorizeHttpRequests(auth -> auth // Allow unauthenticated access to all static resources .requestMatchers("/**").permitAll() // Secure other endpoints as needed .anyRequest().authenticated() ); return http.build(); } }
For Older Versions:
@Configuration public class SecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { http.authorizeRequests() .antMatchers("/**").permitAll() .anyRequest().authenticated(); // Add other security rules here } }
5. Verify File System Permissions
Last but not least, make sure the user running your Spring Boot app has read access to the subdirectories (C:/custResources/1, C:/custResources/2, etc.). On Windows, this might mean adjusting folder permissions to allow your IDE or server process to read those files.
Give these steps a try, and your subdirectory resources should be accessible in no time!
内容的提问来源于stack exchange,提问作者Harshal Patil

