若依项目学习 后端图片访问

案例说明:

服务器上的路径为home/zkqy/uploadPath/upload/2025/06/12/yileina_20250612182156A002.jpg

网页url https://xxx.com/profile/upload/2025/06/12/yileina_20250612182156A002.jpg

只要直接访问网页的url就可以得到图片了,也没有代理啥的,是不是很神奇。

上面的路径和url可以化简成这样。

服务器的路径为:文件初始路径 + 文件上传附加路径

网页的路径为:服务器的域名 + profile + 文件上传附加路径

源码分析

核心的配置文件是在 ResourcesConfig.java,核心代码如下

java 复制代码
@Configuration
public class ResourcesConfig implements WebMvcConfigurer
{
    @Autowired
    private RepeatSubmitInterceptor repeatSubmitInterceptor;

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry)
    {
        /** 本地文件上传路径 */
        registry.addResourceHandler(Constants.RESOURCE_PREFIX + "/**")
                .addResourceLocations("file:" + RuoYiConfig.getProfile() + "/");
    }
}
    

可以发现这个类实现了WebMvcConfigurer接口里面的addResourceHandlers这个资源拦截器。

1. addResourceHandler:定义 URL 访问路径

  • Constants.RESOURCE_PREFIX + "/**"

    这是一个字符串,表示匹配的 URL 路径模式。例如:

    • 若 RESOURCE_PREFIX = "/profile",则匹配所有以 /profile/ 开头的请求(如 /profile/upload/xxx.txt)。
  • /** 是通配符,表示匹配该路径下的所有子路径。

2. addResourceLocations:指定物理存储路径

  • "file:" + RuoYiConfig.getProfile() + "/"

    这里将 URL 路径映射到服务器的本地文件系统:

    • file: 表示这是一个本地文件系统路径(区别于 classpath 资源)。
    • RuoYiConfig.getProfile() 是若依框架中获取文件存储根目录的方法(如返回 D:/zkqy/uploadPath)。
    • 最终拼接为物理路径,例如:file:D:/zkqy/uploadPath/。
相关推荐
实名上网宋凯宣9 小时前
Django
后端·python·django
利威尔xu10 小时前
Go IM 源码实战(14):本地缓存快 3000 倍,失效却难 10 倍
后端·缓存·微服务·面试·golang
逃逸线LOF11 小时前
Ribbon负载均衡原理(Irule组件、源码分析)
后端·spring cloud·ribbon
慢云智慧空间11 小时前
从设备智能到空间理解,空间智能终端解决方案商如何重新定义行业标准
后端
利威尔xu12 小时前
Go IM 源码实战(13):30 个会话只有 2 个红点,未读数错在三条路径
redis·后端·微服务·面试·golang
薛定谔的猫-菜鸟程序员12 小时前
软件架构设计师开发资料大全(从入门到精通)
后端·python·系统架构·flask·架构设计师
IT_陈寒14 小时前
SpringBoot多环境配置把我坑惨了,这个踩坑经验你最好看看
前端·人工智能·后端
码事漫谈14 小时前
DeepSeek 搞了个 "Super-agent",但不是超级智能
后端
吴凡wudianmei14 小时前
从 0 搭一个 AI Agent(四):SSE 跑通之后,三处“契约错配”与它们的修复边界
前端·后端·aigc
小兔子14 小时前
defer 的参数在写下那一刻就求值了,循环里这样写会踩坑
后端