现在有一个需求就是要将本地的文件映射到服务器上,然后可以访问。
比如上传文件,通常我们的项目代码和上传的文件是分离的,比如项目在 D 盘的某个目录,而图片上传在 E 盘某目录,那么如何在服务器上访问 localhost:8080/uploads/1.jpg 能够得到 E 盘上的图片呢?
如果是 Tomcat 配置很简单,之前也介绍过了。
本文介绍 SpringBoot 配置虚拟映射路径的两种方法。
博主用的是 Mac
创建 ApplicationConfig.java
浏览器访问 http://localhost:8080/uploads/logo.jpg 可以显示图片
application.properties
其中 web.upload-path 是自定义的,后面的 /Users/liuyanzhao/Documents/uploads/ 是本地路径。
第二行的 /** 表示后面的所有文件都可以访问
spring.resources.static-locations 在这里配置静态资源路径,前面说了这里的配置是覆盖默认配置,所以需要将默认的也加上否则
浏览器访问 http://localhost:8080/logo.jpg 可以显示图片
比如上传文件,通常我们的项目代码和上传的文件是分离的,比如项目在 D 盘的某个目录,而图片上传在 E 盘某目录,那么如何在服务器上访问 localhost:8080/uploads/1.jpg 能够得到 E 盘上的图片呢?
如果是 Tomcat 配置很简单,之前也介绍过了。
- <Context path="/uploads" docBase="E:\uploads" debug="0" reloadable="true" />
本文介绍 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 可以显示图片
2018年08月06日 16:30:36
试了第一种方法,可以访问到文件,可是这样resource里的静态文件访问不了了,这是为什么?