前言

我们在写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:\AFile\1.jpg

我们来访问一下系统资源下的一张小姐姐图片,访问的时候需要加上前缀file:然后加上绝对路径H:\AFile\1.jpg就可以访问到小姐姐这张图片,浏览器会在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/1.jpg
对应的系统本地静态资源:H:\AFile\1.jpg

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

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

H:\AFile\1.jpg替换掉H:\AFile\localhost:8080/等于http://localhost:8080/1.jpg

验证

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

浏览器访问http://localhost:8080/1.jpg看看效果:

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

H:\AFile下新建一个A文件夹,里面放上一张2.jpg图片

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

H:\AFile\A\2.jpg替换掉H:\AFile\http://localhost:8080/等于http://localhost:8080/A/2.jpg

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

浏览器访问http://localhost:8080/A/2.jpg:

使用配置类

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

@Configuration
public class MvcConfig implements WebMvcConfigurer {//设置文件虚拟路径映射@Overridepublic 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:\AFile\1.jpg替换掉H:\AFile\localhost:8080/test/等于localhost:8080/test/1.jpg

浏览器访问localhost:8080/test/1.jpg

访问H:\AFile\A\下的2.jpg

H:\AFile\A\2.jpg替换掉H:\AFile\localhost:8080/test/等于localhost:8080/test/A/2.jpg

浏览器访问localhost:8080/test/A/2.jpg

SpringBoot设置文件虚拟路径映射教程结束!!!

SpringBoot设置文件虚拟路径映射相关推荐

  1. java文件虚拟路径_java虚拟路径的总结

    在网上看了许多博客,但是试了很多次才弄对,这里进行总结一下在springboot中的使用. 前提:我将本地文件的路径保存在数据库,然后下载文件时,直接点a标签去下载文件.出现报错的情况.(没有将文件直 ...

  2. 前端访问不到本地图片,IDEA设置Tomcat虚拟路径

    案例说明:数据库可以存储图片,但是相当耗费内存,怎么办呢?在数据库中存储图片的相对路径,访问资源时使用相对路径访问. 两种方法 1:图片存储在项目内,使用相对路径访问,该方法使用简单,但是,这样会造成 ...

  3. springboot设置文件上传大小(tomcat默认1M)

    application.yml # 设置文件上传大小(tomcat默认1M) server:tomcat:max-http-form-post-size: -1 spring:servlet:mult ...

  4. springboot2 虚拟路径设置_转载—springboot配置虚拟路径以外部访问

    配置虚拟路径 供外部访问图片 视频等文件 1.配置application.properties ##配置虚拟路径映射 spring.resources.static-locations=classpa ...

  5. xml配置php虚拟路径,apache增加虚拟路径和映射中文路径

    在apache中虚拟路径配置方法很简单,大概步骤为:在apache的httpd.conf文件中找到然后就可以在这里面增加路径了,这个就是apache虚拟路径了. 操作 1.打开httpd.conf文件 ...

  6. 关于Tomcat配置虚拟路径保存、访问图片

    在项目中往往需要上传一些图片文件之类,一般不建议直接保存在数据库内,往往是讲图片等资源保存在服务器的某个文件夹下,传统做法是上传到部署目录下,通过相对路径进行访问. 这样当我们系统需要进行升级,进行全 ...

  7. SpringBoot下文件上传与下载的实现

    原文:http://blog.csdn.net/colton_null/article/details/76696674 SpringBoot后台如何实现文件上传下载? 最近做的一个项目涉及到文件上传 ...

  8. makefile obj文件路径_makefile中包含的文件的路径

    多目录,多目标的makefile问题 一.Makefile里有什么? Makefile里主要包含了五个东西:显式规则.隐晦规则.变量定义.文件指示和注释. 1.显式规则.显式规则说明了,如何生成一个或 ...

  9. [云路由器] 设置了虚拟服务器,外网无法访问服务器怎么办?

    声明:本文纯属个人随手笔记,如果对您有参考价值我十分开心,如果有存在错误,或者有更好的解决办法也麻烦您留言告诉我,大家共同成长,切勿恶言相. 欢迎加入资源共享QQ群:275343679,一起发现知识. ...

最新文章

  1. 16-flutter-Swiper 插件的使用
  2. 【杂谈】从医学专业转行到AI,独立完成项目到获得加州理工大学读研推荐,我如何与有三AI结缘...
  3. 实时音视频技术的演进与应用
  4. 第七章:Java_集合
  5. 图示不写程序如何根据dbSNP rs号批量获取基因组坐标、相关基因和表型影响
  6. Linux 权限管理之基本权限
  7. webpack4.0各个击破(3)—— Assets篇
  8. 路由器性能测试工具_小米路由器AX3600与AX1800 MESH 实测
  9. mysql数据类型范围导致失败
  10. UNIX Linux网络日志分析与流量监控
  11. OpenCV处理椒盐噪声以及提高对比度
  12. html中的form是空标签么,关于html 中form表单的内标签和使用
  13. PDF证书加密文件如何解密?
  14. 学生对计算机老师评价,浅谈初中计算机专业老师如何对学生进行多元化评价(3页)-原创力文档...
  15. Android Studio 常用快捷键(MAC)
  16. 移动、电信光猫超级管理员密码
  17. DWG中注记类型属性转换
  18. 在线作图丨差异分析——ANOSIM相似性分析
  19. Vue 生成海报图的方法
  20. 小米手机录屏功能在哪?图文教学,轻松解决

热门文章

  1. java 立体几何体中心点_在Word 2000中巧妙绘制立体几何图形
  2. 四核处理器_攀升推出 MaxBook P1 笔记本:四核CPU+15.6英寸大屏,1899 元
  3. 2020的中国SaaS产业,开始起飞!
  4. java读取文件夹下的所有txt文件,java读取文件夹下文件及txt内容
  5. python石头剪刀布
  6. 20144303 《Java程序设计》第二次实验实验报告
  7. acacm icpc java_Java在acm-icpc的应用
  8. HP-UX 磁盘管理
  9. 原生NodeJs的优缺点以及Express框架
  10. 自己写的iOS BLE SDK