将磁盘文件(夹)映射为网络路径
如何将项目外的某些文件(夹)映射为网络路径?
- 例如:访问
/download/**
时,响应/file/
文件夹下的文件
解决方案
java
package cloud.xuxiaowei.file.config;
import org.springframework.context.annotation.Configuration;
import org.springframework.lang.NonNull;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
/**
* {@link WebMvcConfigurationSupport} 优先级比 {@link WebMvcConfigurer} 高
* <p>
* 使用了 {@link WebMvcConfigurationSupport} 之后,{@link WebMvcConfigurer} 会失效
* <p>
* 一旦自定义了配置,默认配置将会被覆盖
*
* @author xuxiaowei
* @since 0.0.1
*/
@Configuration
public class WebMvcConfigurationSupportConfig extends WebMvcConfigurationSupport {
@Override
protected void addResourceHandlers(@NonNull ResourceHandlerRegistry registry) {
// 此行配置用于确保 src/main/resources/static 静态文件夹可以正常访问
registry.addResourceHandler("/**").addResourceLocations("classpath:/static/");
// 将网络路径 /download/** 映射到 /file/ 文件夹(在 Windows 系统中,/file/ 代表 当前软件运行的盘符的根目录)
// 示例:访问 /download/test.png 时,Spring MVC 会尝试查看 /file/test.png 是否存在,如果存在,将返回此图片
registry.addResourceHandler("/download/**").addResourceLocations("file:/file/");
}
}
java
package cloud.xuxiaowei.file.config;
import org.springframework.context.annotation.Configuration;
import org.springframework.lang.NonNull;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
/**
* {@link WebMvcConfigurationSupport} 优先级比 {@link WebMvcConfigurer} 高
* <p>
* 使用了 {@link WebMvcConfigurationSupport} 之后,{@link WebMvcConfigurer} 会失效
* <p>
* 不会进行覆盖默认配置
*
* @author xuxiaowei
* @since 0.0.1
*/
@Configuration
public class WebMvcConfigurerConfig implements WebMvcConfigurer {
@Override
public void addResourceHandlers(@NonNull ResourceHandlerRegistry registry) {
// 无需处理 src/main/resources/static 静态文件夹内的文件,不会进行覆盖默认配置
// 将网络路径 /download/** 映射到 /file/ 文件夹(在 Windows 系统中,/file/ 代表 当前软件运行的盘符的根目录)
// 示例:访问 /download/test.png 时,Spring MVC 会尝试查看 /file/test.png 是否存在,如果存在,将返回此图片
registry.addResourceHandler("/download/**").addResourceLocations("file:/file/");
}
}