Spring Boot 项目中关于文件上传与访问的配置方案
-
- [1. 图⽚上传](#1. 图⽚上传)
- [🛠️ 1. 配置项详解](#🛠️ 1. 配置项详解)
- [🔄 2. 业务流程:一张图片是如何"活"起来的?](#🔄 2. 业务流程:一张图片是如何“活”起来的?)
- [🌉 比喻:](#🌉 比喻:)
- [📌 总结](#📌 总结)
1. 图⽚上传
java
## 图⽚服务(文件上传) ##
# 目标路径
pic.local-path=D:/PIC
# spring boot3 升级配置名
spring.web.resources.static-locations=classpath:/static/,file:${pic.local-path}
这是一个典型的 Spring Boot 项目中关于文件上传与访问的配置方案。
这段配置的核心目的是:让 Spring Boot 不仅能访问项目自带的静态资源(如 JS、CSS),还能访问服务器本地磁盘上的文件(如用户上传的图片),从而实现图片服务。
🛠️ 1. 配置项详解
pic.local-path=D:/PIC
含义:这是一个自定义的配置属性。
作用:定义了一个变量 pic.local-path,其值为 D:/PIC。这代表你指定的物理存储路径。
逻辑:当用户通过接口上传图片时,后端代码(Java)会读取这个路径,将文件实实在在地保存到服务器 D 盘的 PIC 文件夹中。
spring.web.resources.static-locations=classpath:/static/,file:${pic.local-path}
含义:这是 Spring Boot 3 中用于配置静态资源访问位置的官方属性。
作用:告诉 Spring Boot 哪些目录下的文件可以直接通过 HTTP URL 访问。
拆解:
classpath:/static/:这是默认配置,指项目 resources 文件夹下的 static 目录,通常存放前端代码、图标等。
file:${pic.local-path}:这是关键。file: 前缀表示这是一个本地磁盘路径。${pic.local-path} 是占位符,会自动读取上面定义的 D:/PIC。
效果:配置完成后,Spring Boot 会将 D:/PIC 目录映射为可公开访问的静态资源目录。
🔄 2. 业务流程:一张图片是如何"活"起来的?
结合上述配置,一个完整的图片上传与展示流程如下:
上传(写入磁盘)
前端调用上传接口(如 /api/upload)。
后端接收到文件流,利用 pic.local-path 的值(D:/PIC),将文件保存到服务器的 D:\PIC\abc.jpg。
访问(映射 URL)
前端需要展示这张图片,它需要拼接一个 URL。
URL 规则:http://服务器地址:端口/文件在目录中的相对路径
示例:如果后端返回给前端的文件名是 abc.jpg,前端在 中填入:
Spring Boot 内部处理:
收到请求 /abc.jpg。 根据 static-locations 配置,先查 classpath:/static/(没找到)。 再查 file:D:/PIC/。
在 D:/PIC/ 目录下找到了 abc.jpg,将其作为流返回给前端。
🌉 比喻:
快递驿站(映射关系)
你可以把 Spring Boot 项目想象成一个快递驿站(服务器)。
自带仓库(classpath:/static/):
驿站自己有一个小仓库,里面放着官方发来的杂志、海报。大家都知道去这里拿。
私人储物间(D:/PIC):
你(开发者)在驿站旁边自己租了一个大仓库(D盘的PIC文件夹),用来存你自己的包裹(用户上传的图片)。
关键配置(static-locations):
以前驿站的快递员(Spring Boot 框架)只认自己的仓库,不认你的私人储物间。
这行配置的作用就是: 告诉驿站的所有快递员:"以后有人来找包裹,除了查自己的仓库,顺便也去旁边的私人储物间(D:/PIC)里查一下。"
结果:以前别人拿不到你储物间里的包裹,现在只要报出包裹名(URL路径),快递员就能去你的储物间找到它并交给对方。
📌 总结
这行代码的本质功能:
声明:告诉 Spring Boot,"兄弟,除了你自己管的地方,D盘PIC文件夹也是咱们的地盘"。
放行:当浏览器请求一个图片(比如 1.jpg)时,Spring Boot 会去 D:/PIC 里把这个文件找出来,通过网络发给浏览器。
如果没有这行配置:文件虽然存到了 D 盘,但 Spring Boot 装作看不见,浏览器访问时会返回 404 Not Found。