SpringBoot配置虚拟映射路径

广告也精彩

现在有一个需求就是要将本地的文件映射到服务器上,然后可以访问。

比如上传文件,通常我们的项目代码和上传的文件是分离的,比如项目在 D 盘的某个目录,而图片上传在 E 盘某目录,那么如何在服务器上访问 localhost:8080/uploads/1.jpg 能够得到 E 盘上的图片呢?

如果是 Tomcat 配置很简单,之前也介绍过了。

  1. <Context path="/uploads" docBase="E:\uploads" debug="0" reloadable="true" />

 

本文介绍 SpringBoot 配置虚拟映射路径的两种方法。

 

博主用的是 Mac

在 /Users/liuyanzhao/Documents/uploads 目录下有一张图片 logo.jpg

现在想要在服务器上访问这张图片

方法一、

创建 ApplicationConfig.java

  1. package com.liuyanzhao.chuyun.config;
  2. import org.springframework.context.annotation.Configuration;
  3. import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
  4. import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
  5. /**
  6.  * @author 言曌
  7.  * @date 2018/2/27 下午3:32
  8.  */
  9. @Configuration
  10. public class ApplicationConfig extends WebMvcConfigurerAdapter {
  11.     @Override
  12.     public void addResourceHandlers(ResourceHandlerRegistry registry) {
  13.         /*
  14.         * 说明:增加虚拟路径(经过本人测试:在此处配置的虚拟路径,用springboot内置的tomcat时有效,
  15.         * 用外部的tomcat也有效;所以用到外部的tomcat时不需在tomcat/config下的相应文件配置虚拟路径了,阿里云linux也没问题)
  16.         */
  17.         //Windows下
  18.         registry.addResourceHandler("/uploads2/**").addResourceLocations("file:D:/uploads2/");
  19.         //Mac或Linux下(没有CDEF盘符)
  20.         registry.addResourceHandler("/uploads/**").addResourceLocations("file:/Users/liuyanzhao/Documents/uploads/");
  21.         super.addResourceHandlers(registry);
  22.     }
  23. }

浏览器访问 http://localhost:8080/uploads/logo.jpg 可以显示图片

 

方法二、

application.properties

  1. web.upload-path=/Users/liuyanzhao/Documents/uploads/
  2. spring.mvc.static-path-pattern=/**
  3. spring.resources.static-locations=classpath:/META-INF/resources/,classpath:/resources/, classpath:/static/, classpath:/public/,file:${web.upload-path}

其中 web.upload-path 是自定义的,后面的 /Users/liuyanzhao/Documents/uploads/  是本地路径。

第二行的 /** 表示后面的所有文件都可以访问

spring.resources.static-locations 在这里配置静态资源路径,前面说了这里的配置是覆盖默认配置,所以需要将默认的也加上否则staticpublic等这些路径将不能被当作静态资源路径,在这个最末尾的file:${web.upload-path}之所有要加file:是因为指定的是一个具体的硬盘路径,其他的使用classpath指的是系统环境变量。

 

浏览器访问 http://localhost:8080/logo.jpg 可以显示图片

 

 

  • 微信
  • 赶快加我聊天吧
  • weinxin
  • 博客/Java交流群
  • 资源分享,问题解决,技术交流。群号:590480292
  • weinxin
言曌
广告也精彩

发表评论

:?::razz::sad::evil::!::smile::oops::grin::eek::shock::???::cool::lol::mad::twisted::roll::wink::idea::arrow::neutral::cry::mrgreen: