addResourceHandler配置静态资源映射本地文件
- 配置类
@Configuration
public class MyMvcConfig implements WebMvcConfigurer {
@Autowired
private LoginInterceptor loginInterceptor;
// 自己配置读取yaml的属性类
@Autowired
private MyMvcConfigProperties myMvcConfigProperties;
// 添加静态资源映射
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
StringBuilder path = new StringBuilder();
path.append(System.getProperty("user.dir"));
// windows环境
if (System.getProperty("os.name").toLowerCase().contains("windows")) {
path.append(myMvcConfigProperties.getWindowsPath());
registry.addResourceHandler(myMvcConfigProperties.getResourceHandle()).addResourceLocations("file:" + path.toString() + "/");
} else { // linux环境
path.append(myMvcConfigProperties.getLinuxPath());
registry.addResourceHandler(myMvcConfigProperties.getResourceHandle()).addResourceLocations(path.toString() + "/");
}
myMvcConfigProperties.setRealPath(path.toString());
}
}
这里一定要注意, addResourceLocations路径后面一定要以"/"结尾, 否则报404, 个人猜测这里使用的是字符串拼接:abc123.png❌ abc/123.png ✔
- 属性类
@ConfigurationProperties(prefix = "avatar")
@Component
@Data
@NoArgsConstructor
@AllArgsConstructor
public class MyMvcConfigProperties {
private String resourceHandle;
private String linuxPath;
private String windowsPath;
private String realPath;
}
- yaml配置文件
# 头像静态资源映射
avatar:
resource-handle: /avatar/**
linux-path: \blog_fullstack_avatar
windows-path: \blog-api\src\main\resources\assets\avatar
- 用yaml和属性类的好处是, 在文件上传, 存储数据库都可以方便编码(软编码),不推荐硬编码(写死)。
- 个人还是推荐, 文件上传还是搞个云存储比较好点,而不是读取服务器磁盘。
版权声明:本文为qq_45593068原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。