SpringBoot 项目Jar部署,设置附件访问目录

/ JavaWeb / 636浏览

静态资源配置说明

Spring项目中对于附件访问、静态资源访问这些都是属于Web领域范围,所以在Spring家族中,SpringMvc承担着对Web访问控制相关的配置。

例如下面的配置文件 application.yml ,配置了默认的静态资源文件,浏览器访问的映射为根目录,即 /**。

## 据源配置
spring: 
  #添加静态资源文件目录
  mvc: 
    static-path-pattern: /**
  resources: 
    static-locations: classpath:/META-INF/resources/,classpath:/resources/,classpath:/static/

通过以上配置,我们可以将系统上传的附件也加进去,然后通过系统的根目录就可以访问了。但是不推荐这样做(上面的配置中,更适用静态的资源文件,我们上传的附件必定是动态资源),所以,最好配置一个专门为上传附件访问的虚拟路径,来提供访问。

配置SpringMvc虚拟访问路径

首先创建一个配置类,继承 WebMvcConfigurerAdapter,然后重写addResourceHandlers函数,如下:

/**
 * Spring MVC 配置
 */
@Configuration
public class WebMvcConfig extends WebMvcConfigurerAdapter {

    //附件web虚拟访问目录
    @Value("${web.upload.access_path}")
    private String uploadAccessPath;

    //附件物理文件夹目录
    @Value("${web.upload.file_path}")
    private String uploadFolder;
	
    //注册web文件资源访问地址
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler(uploadAccessPath).addResourceLocations("file:" + uploadFolder);
    }
}

其中,分别在配置文件里定义了两个变量:

# 附件路径设置
web: 
  upload:
    file_path: /usr/local/server/corpdata-space/file/
    access_path: /api/file/**

file_path,物理路径,上传或访问附件时需要进行IO处理的的真实路径;
access_path,虚拟路径,在http请求时映射物理路径的资源路径。

这样,我们的附件文件,就可以通过 /api/file/ 来访问了,比如在 /usr/local/server/corpdata-space/file/ 下有个附件,1.jpg,那么通过http可以请求 http://localhost/api/file/1.jpg 地址来访问。

注意一点,配置的目录物理路径,在末尾一定要增加/结束,不然会请求提示404问题。