addResourceHandler配置静态资源映射本地文件

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版权协议,转载请附上原文出处链接和本声明。