当我们在运行可执行的java jar包的时候,我们肯定改变不了jar里面的内容,因此文件上传路径就成了我们必须考虑的一点问题,我们不能往直接这个jar包里面写文件,那么只能写在jar包外面,但是写到jar包外面的时候要怎么通过内置的tomcat下载文件呢?springboot给我们提供了一种方式,可以将jar包外部路径映射到jar里面。接下来我们看看如何实现。

1、springboot2.0以前:我们通过继承WebMvcConfigurerAdapter来实现文件路径的映射。

@Configuration
public class FileConfig extends WebMvcConfigurerAdapter { private String uploadPath = E://file/; @Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/file/**").addResourceLocations("file:"+uploadPath);
super.addResourceHandlers(registry);
}
}

2、WebMvcConfigurerAdapter的内部实现

WebMvcConfigurerAdapter实现了WebMvcConfigurer接口的所有空方法。

@Deprecated
public abstract class WebMvcConfigurerAdapter implements WebMvcConfigurer {
public WebMvcConfigurerAdapter() {} public void configurePathMatch(PathMatchConfigurer configurer) {} public void configureContentNegotiation(ContentNegotiationConfigurer configurer) {} public void configureAsyncSupport(AsyncSupportConfigurer configurer) {} public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {} public void addFormatters(FormatterRegistry registry) {} public void addInterceptors(InterceptorRegistry registry) {} public void addResourceHandlers(ResourceHandlerRegistry registry) {} public void addCorsMappings(CorsRegistry registry) {} public void addViewControllers(ViewControllerRegistry registry) {} public void configureViewResolvers(ViewResolverRegistry registry) {} public void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) {} public void addReturnValueHandlers(List<HandlerMethodReturnValueHandler> returnValueHandlers) {} public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {} public void extendMessageConverters(List<HttpMessageConverter<?>> converters) {} public void configureHandlerExceptionResolvers(List<HandlerExceptionResolver> exceptionResolvers) {} public void extendHandlerExceptionResolvers(List<HandlerExceptionResolver> exceptionResolvers) {}
@Nullable
public Validator getValidator() {
return null;
} @Nullable
public MessageCodesResolver getMessageCodesResolver() {
return null;
}
}

3、WebMvcConfigurerAdapter为什么会过时?

这是因为由于Java的版本更新,在Java 8中,可以使用default关键词为接口添加默认的方法,Spring在升级的过程中也同步支持了Java 8中这一新特性。

4、新选择WebMvcConfigurer

我们看一下它实现的接口WebMvcConfigurer,既然WebMvcConfigurer默认有了空实现,我们直接实现WebMvcConfigurer接口即可。

public interface WebMvcConfigurer {
default void configurePathMatch(PathMatchConfigurer configurer) {} default void configureContentNegotiation(ContentNegotiationConfigurer configurer) {} default void configureAsyncSupport(AsyncSupportConfigurer configurer) {} default void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {} default void addFormatters(FormatterRegistry registry) {} default void addInterceptors(InterceptorRegistry registry) {} default void addResourceHandlers(ResourceHandlerRegistry registry) {} default void addCorsMappings(CorsRegistry registry) {} default void addViewControllers(ViewControllerRegistry registry) {} default void configureViewResolvers(ViewResolverRegistry registry) {} default void addArgumentResolvers(List<HandlerMethodArgumentResolver> resolvers) {} default void addReturnValueHandlers(List<HandlerMethodReturnValueHandler> handlers) {} default void configureMessageConverters(List<HttpMessageConverter<?>> converters) {} default void extendMessageConverters(List<HttpMessageConverter<?>> converters) {} default void configureHandlerExceptionResolvers(List<HandlerExceptionResolver> resolvers) {} default void extendHandlerExceptionResolvers(List<HandlerExceptionResolver> resolvers) {} @Nullable
default Validator getValidator() {
return null;
} @Nullable
default MessageCodesResolver getMessageCodesResolver() {
return null;
}
}

5、更新后的代码如下:

@Configuration
public class FileConfig implements WebMvcConfigurer { private String uploadPath = E://file/; @Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/file/**").addResourceLocations("file:"+uploadPath);
super.addResourceHandlers(registry);
}
}

如果各位想直接使用,且用的spring boot版本在2以上,则复制第五点到项目中就好了。最后祝广大程序猿1024快乐。多长头发,少些bug。

如果文章对您有帮助,请记得点赞关注哟~

欢迎大家关注我的公众号<情系IT>,每日技术推送文章供大家学习参考。

spring boot 2.x文件路径映射问题汇总的更多相关文章

  1. springboot(十七):使用Spring Boot上传文件

    上传文件是互联网中常常应用的场景之一,最典型的情况就是上传头像等,今天就带着带着大家做一个Spring Boot上传文件的小案例. 1.pom包配置 我们使用Spring Boot最新版本1.5.9. ...

  2. (转)Spring Boot(十七):使用 Spring Boot 上传文件

    http://www.ityouknow.com/springboot/2018/01/12/spring-boot-upload-file.html 上传文件是互联网中常常应用的场景之一,最典型的情 ...

  3. Spring Boot(十七):使用Spring Boot上传文件

    Spring Boot(十七):使用Spring Boot上传文件 环境:Spring Boot最新版本1.5.9.jdk使用1.8.tomcat8.0 一.pom包配置 <parent> ...

  4. Spring boot 默认静态资源路径与手动配置访问路径的方法

    这篇文章主要介绍了Spring boot 默认静态资源路径与手动配置访问路径的方法,非常不错,具有参考借鉴价值,需要的朋友可以参考下   在application.propertis中配置 ##端口号 ...

  5. 使用Spring Boot上传文件

    原文:http://www.cnblogs.com/ityouknow/p/8298344.html 上传文件是互联网中常常应用的场景之一,最典型的情况就是上传头像等,今天就带着带着大家做一个Spri ...

  6. Spring Boot(十七):使用 Spring Boot 上传文件

      上传文件是互联网中常常应用的场景之一,最典型的情况就是上传头像等,今天就带着带着大家做一个 Spring Boot 上传文件的小案例. 1.pom 包配置 我们使用 Spring Boot 版本 ...

  7. Spring Boot上传文件(带进度条)

    Spring Boot 上传文件(带进度条)# 配置文件 spring: freemarker: template-loader-path: classpath:/static/ ##Spring B ...

  8. Spring Boot 嵌入式 Tomcat 文件上传、url 映射虚拟路径

    1.Java web 应用开发完成后如果是导入外置的 Tomcat 的 webapps 目录的话,那么上传的文件可以直接的放在应用的 web 目录下去就好了,浏览器可以很方便的进行访问. 2.Spri ...

  9. 在Spring Boot中从类路径加载文件

    介绍 创建Spring Boot Web应用程序时,有时有时需要从类路径中加载文件:war和jar的加载文件格式是不一样的 在下面,您将找到在WAR和JAR中加载文件的解决方案. 资源加载器 使用Ja ...

随机推荐

  1. Python—字符串和常用数据结构

    目录 1. 字符串 2. 列表 2.1 列表的增删改查 2.2 列表的切片和排序 2.3 生成式语法 3. 元组 4.集合 5. 字典 5.1 字典的增删改查 5.2 字典的常见操作 序言:这一章我们 ...

  2. Linux 笔记 - 第六章 Linux 磁盘管理

    博客地址:http://www.moonxy.com 一.前言 1.1 硬盘 硬盘一般分为 IDE 硬盘.SCSI 硬盘和 SATA 硬盘.在 Linux 中,IDE 接口的设备被称为 hd,SCSI ...

  3. 深入理解Three.js中正交摄像机OrthographicCamera

    前言 在深入理解Three.js中透视投影照相机PerspectiveCamera那篇文章中讲解了透视投影摄像机的工作原理以及对应一些参数的解答,那篇文章中也说了会单独讲解Three.js中另一种常用 ...

  4. Sentinel基本概念

     Sentinel是阿里开源的一款高性能的限流框架.这里将对Sentinel的使用和实现进行介绍.  这里先介绍下Sentinel中涉及到的基本概念,包括使用上或者实现上.主要是笔者在阅读文档和源码时 ...

  5. Docker运行mysql,redis,oracle容器和SpringBoot项目

    dokcer运行SpringBoot项目 from frolvlad/alpine-oraclejdk8:slim VOLUME /tmp ADD target/demo-0.0.1-SNAPSHOT ...

  6. 一个selenium简单案例自动添加数据

    //本来想着用execl来录入数据的,但是为了尽快完成所以直接搞了个数组 package aldtest; import org.openqa.selenium.*; import org.openq ...

  7. cp -rf 操作时依然会提示覆盖

    在linux上经常会使用cp -rf命令,该命令就是强制覆盖指定目录下的文件,但有时使用该命令依然会提示是否覆盖,cp命令的参数有如下一些: 参数说明: -a:此选项通常在复制目录时使用,它保留链接. ...

  8. js校验对象是否全部为空

    function judgeIsNotBlank(obj) { var bool = true; var arr = Object.keys(obj); ; for(var key in obj){ ...

  9. [Mathematics][MIT 18.03] Proof of a Theory about the Solution to Second-order Linear Homogeneous Differential Equation

    At first, I'd like to say thank you to MIT open courses which give me the privilege to enjoy the mos ...

  10. 生产环境项目问题记录系列(二):Docker打包镜像Nuget包因权限问题还原失败

    docker打包镜像遇到一个因为nuget权限验证问题导致镜像打包失败的问题,公司Nuget包用的是tfs管理的,tfs有权限验证,结果导致nuget还原失败,原有的NuGet.config文件如下: ...