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 可以显示图片    

发表评论

目前评论:2

  • avatar 951029

    试了第一种方法,可以访问到文件,可是这样resource里的静态文件访问不了了,这是为什么?