现在有一个需求就是要将本地的文件映射到服务器上,然后可以访问。
比如上传文件,通常我们的项目代码和上传的文件是分离的,比如项目在 D 盘的某个目录,而图片上传在 E 盘某目录,那么如何在服务器上访问 localhost:8080/uploads/1.jpg 能够得到 E 盘上的图片呢?
如果是 Tomcat 配置很简单,之前也介绍过了。
本文介绍 SpringBoot 配置虚拟映射路径的两种方法。
博主用的是 Mac
在 /Users/liuyanzhao/Documents/uploads 目录下有一张图片 logo.jpg
现在想要在服务器上访问这张图片
方法一、
创建 ApplicationConfig.java
package com.liuyanzhao.chuyun.config;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
/**
* @author 言曌
* @date 2018/2/27 下午3:32
*/
@Configuration
public class ApplicationConfig extends WebMvcConfigurerAdapter {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
/*
* 说明:增加虚拟路径(经过本人测试:在此处配置的虚拟路径,用springboot内置的tomcat时有效,
* 用外部的tomcat也有效;所以用到外部的tomcat时不需在tomcat/config下的相应文件配置虚拟路径了,阿里云linux也没问题)
*/
//Windows下
registry.addResourceHandler("/uploads2/**").addResourceLocations("file:D:/uploads2/");
//Mac或Linux下(没有CDEF盘符)
registry.addResourceHandler("/uploads/**").addResourceLocations("file:/Users/liuyanzhao/Documents/uploads/");
super.addResourceHandlers(registry);
}
}
浏览器访问 http://localhost:8080/uploads/logo.jpg 可以显示图片
方法二、
application.properties
web.upload-path=/Users/liuyanzhao/Documents/uploads/
spring.mvc.static-path-pattern=/**
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 在这里配置静态资源路径,前面说了这里的配置是覆盖默认配置,所以需要将默认的也加上否则static、public等这些路径将不能被当作静态资源路径,在这个最末尾的file:${web.upload-path}之所有要加file:是因为指定的是一个具体的硬盘路径,其他的使用classpath指的是系统环境变量。
浏览器访问 http://localhost:8080/logo.jpg 可以显示图片