springboot 添加静态资源映射(WebMvcConfigurer)(设置上传目录)

添加外部静态资源目录

springboot 默认的静态资源目录,都在 jar包内,在有些场景并不适用,比如:

  • 电商平台,商家上传商品的图片,该图片不能保存在 jar包中,只能保存到外部路径,如:d:\pic目录

  • 在买家浏览页面时,还能够正常显示该图片

所以,在 上传文件、下载文件 时,就需要外部的静态资源目录

配置文件

application.properties

# 静态资源目录,最后要以 / 结尾
file.upload=D:/pic/
# 静态资源url,最后要以 / 结尾
file.url=/upload/

application.yml

file:
  # 静态资源目录,最后要以 / 结尾
  upload: D:/pic/
  # 静态资源url,最后要以 / 结尾
  url: /upload/

java 代码

@Configuration
public class WebMvcConfig implements WebMvcConfigurer {

    @Value("${file.upload}")
    private String upload;

    @Value("${file.url}")
    private String url;

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {

        registry.addResourceHandler(url+"**").addResourceLocations("file:"+upload);
    }
}

注意:

  • ** 表示 upload 路径(url)下的资源,以及 子路径 下的资源

  • file: 开头,表示磁盘路径, 以 / 结尾

作用

访问:http://ip:port/context/upload/1.jpg 时,就会去 d:/pic 目录下找 1.jpg

测试1

放图片

在 d:/pic/目录 放 1.jpg,如下图:

访问

访问:http://localhost:8080/upload/1.jpg

就会去 d:/pic/ 目录下找 1.jpg 文件

测试2

放图片

在 d:/pic/a/目录 放 2.jpg,如下图:

访问

访问:http://localhost:8080/upload/a/2.jpg

就会去 d:/pic/a/ 目录下找 2.jpg 文件

原因:

在类中配置了 **

测试3

类中去掉一个 *,就不能映射子目录,访问:http://localhost:8080/upload/a/2.jpg 就报404错误


原文出处:/show_1IXf6OCkoHc.html