栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

SpringBoot设置文件虚拟路径映射

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

SpringBoot设置文件虚拟路径映射

前言

我们在写SpringBoot项目的时候,很大几率会遇到文件上传与下载功能。
我们一般访问服务器的资源都是resources下的公开资源,配置文件中一般会指定到类路径下的static文件夹下:spring.resources.static-locations=classpath:/static/,或者说不配置默认指定在类路径下:classpath:/,例如:

# 应用服务 WEB 访问端口
server.port=8080
# 项目资源路径:必须加static作为前缀才能访问 默认为/**
spring.mvc.static-path-pattern=/static/**
# 将项目资源路径映射到系统资源路径下
spring.resources.static-locations=classpath:/ #效果等同于不配置

但是我们可能会把一些项目的文件放在其他服务器或者硬盘中,这样可以更好的存储和管理系统的文件,那么我们应该如何通过项目的路径来访问这些文件呢?

只需要我们给SpringBoot中配置一个虚拟路径,将硬盘的路径映射到项目路径下,这样就可以通过项目路径来访问硬盘中的资源了。


本文将讲解2种方法

  1. 配置application.properties/yml
  2. 自定义配置类实现WebMvcConfigurer接口

准备系统资源路径

为了演示效果,我会在本地系统路径中存放一张图片:

系统路径:H:AFilebaidu.png
我们来访问一下系统资源下的一张百度图片,访问的时候需要加上前缀file:然后加上绝对路径H:AFilebaidu.png就可以访问到百度这张图片,浏览器会在file:后面加上///,你只需要以前缀file:加上绝对路径即可无需写成file:,交给浏览器来做。

配置SpringBoot虚拟路径的映射

定义application文件

# 应用服务 WEB 访问端口
server.port=8080
# 项目静态资源路径,可以不写默认为/**
# spring.mvc.static-path-pattern=/**
# 将项静态目资源路径映射到系统资源路径下
spring.resources.static-locations=file:H:AFile

项目资源路径不写默认为/**,意味着你在localhost:8080/下能直接访问静态资源,而静态资源映射在系统资源H:AFile文件夹下,你所访问项目静态资源路径都和系统本地资源路径一一对应。

Tips:

spring.resources.static-locations可以指定多个资源路径,用,隔开

spring.resources.static-locations=file:G:AFile,file:H:AFile

如果访问多个路径中存在相同名称的资源,会采取就近原则,将静态资源路径从左往右寻找最近的一个资源返回给浏览器。

资源路径

访问项目静态资源:http://localhost:8080/baidu.png
对应的系统本地静态资源:H:AFilebaidu.png

说白了就是项目路径http://localhost:8080/后面的资源名称会对应在系统本地路径H:AFile的后面

路径规则:
本地绝对路径替换掉本地静态资源路径为项目静态资源路径

H:AFilebaidu.png替换掉H:AFile为localhost:8080/等于http://localhost:8080/baidu.png

验证

光说没用,下面来验证一下上面的说法:

浏览器访问http://localhost:8080/baidu.png看看效果:

我们访问的一直是H:AFile下的资源文件,那如果我新建文件夹然后在里面放上文件会怎么样呢?

在H:AFile下新建一个A文件夹,里面放上一张360.png图片

我们套用路径规则来访问一下:
本地绝对路径替换掉本地静态资源路径为项目静态资源路径

H:AFileA360.png替换掉H:AFile为http://localhost:8080/等于http://localhost:8080/A/360.png

注意:本地路径的斜杠需要换成项目路径的斜杠/

浏览器访问http://localhost:8080/A/360.png:

使用配置类

新建一个Java类名称自定义,加上注解@Configuration就是一个配置类,实现WebMvcConfigurer接口并重写addResourceHandlers()方法:

@Configuration
public class MvcConfig implements WebMvcConfigurer {
    //设置文件虚拟路径映射
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/test/**").addResourceLocations("file:H:\AFile\");
    }
}
  • addResourceHandler:添加一个资源处理程序,用于根据指定的 URL 路径模式提供静态资源。 将为与指定路径模式之一匹配的每个传入请求调用处理程序。
  • addResourceLocations:添加一个或多个用于提供静态内容的资源位置。 每个位置都必须指向一个有效的目录。 可以将多个位置指定为逗号分隔的列表,并且将按照指定的顺序检查给定资源的位置。

白话文解释

  • addResourceHandlers:添加项目静态资源路径
  • addResourceLocations:将项目静态资源映射到本地指定的资源路径
registry.addResourceHandler("/test/**").addResourceLocations("file:H:\AFile\");

连起来说白了就是localhost:8080/test/该路径下访问的静态资源对应着本地H:AFile目录下的资源文件。

演示

将之前的配置全部注释掉:

例如我要访问百度这张图片

这里依然可以套用路径规则
本地绝对路径替换掉本地静态资源路径为项目静态资源路径

H:AFilebaidu.png替换掉H:AFile为localhost:8080/test/等于localhost:8080/test/baidu.png

浏览器访问localhost:8080/test/baidu.png:

访问H:AFileA下的360.png

H:AFileA360.png替换掉H:AFile为localhost:8080/test/等于localhost:8080/test/A/360.png

浏览器访问localhost:8080/test/A/360.png:

SpringBoot设置文件虚拟路径映射教程结束!!!
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/439334.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号