Springboot 关于访问静态资源总结

需求说明:

项目需要实现用户预览,存储在本地硬盘的pdf文件。为了方便区分与resources目录下的 static,public等文件,需要单独适用file来映射我们存储在本地的文件资源。

即:如果配置了/file/** ,映射到本地C:/testDir/
即可通过/file/1.pdf,访问到C:/testDir/1.pdf

方式一:

新建一个类文件命名为WebConfig 并实现WebMvcConfigurer,重写
addResourceHandlers方法

package com.example.demo.controller;

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.PathMatchConfigurer;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration
public class WebConfig implements WebMvcConfigurer {

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry){
        //file:C:/testDir/ 中file 是一个标识和前面的file不一样,值得是物理地址
        registry.addResourceHandler("/file/**").addResourceLocations("file:C:/testDir/");
        ///img/1.pdf也可以访问到C:/testDir数据
        registry.addResourceHandler("/img/**").addResourceLocations("file:C:/testDir/");
        registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/");
        //一个虚拟路径可对应多个物理地址
        registry.addResourceHandler("/**").addResourceLocations("classpath:/static/")
                .addResourceLocations("classpath:/public/");
    }

    @Override
    public void configurePathMatch(PathMatchConfigurer configurer) {
        // 匹配结尾 / :会识别 url 的最后一个字符是否为 /
        //true时 localhost:8080/test 与 localhost:8080/test/ 等价
        configurer.setUseTrailingSlashMatch(true);
        // 匹配后缀名:会识别 xx.* 后缀的内容
        // true时 localhost:8080/test 与 localhost:8080/test.jsp 等价
        configurer.setUseSuffixPatternMatch(false);
    }
}

方式二:

spring.mvc.static-path-pattern 可以指定一个 静态资源路径如/img/**
默认的会失效
spring.resources.static-locations 指定静态资源位置,回鹘该默认配置,使用时需要加上默认的值

只有以/img/开头的请求才会被解析为静态资源,并在spring.resources.static-locations指定的目录下寻找资源
spring.mvc.static-path-pattern=/img/*
#默认值为
spring.resources.static-locations=classpath:/META-INF/resources/,classpath:/resources/,classpath:/static/,classpath:/public/
#举例:
spring.resources.static-locations= classpath:/static/,file:C:/testDir/

注:

如果在项目中有多个yml文件dev,pro ,由于开发环境和生产环境的,系统不同,所以导致访问文件的路径也不相同。但是又不想修改config文件。我们可以在yml文件中自定义变量,然后在config中适用@Value动态改变/file/…内容;`

#自定义文件上传路径
customizeUploadFilePath : file:/data5/apply/rebate/uploadFile/
customizeUploadFileViewPath : /data5/apply/rebate/uploadFile

//Java部分代码
 @Value("${customizeUploadFilePath}")
    private String customizeUploadFilePath;

   @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
       //registry.addResourceHandler("/file/**").addResourceLocations("file:C:/testDir/");
	  // registry.addResourceHandler("/file/**").addResourceLocations("file:/data5/apply/rebate/uploadFile/");
       registry.addResourceHandler("/file/**").addResourceLocations(customizeUploadFilePath);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

dylan95

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值