Springboot静态资源映射及文件映射

简介: 在Spring Boot项目中,为了解决前端访问后端存储的图片问题,起初尝试通过静态资源映射实现,但发现这种方式仅能访问打包时已存在的文件。对于动态上传的图片(如头像),需采用资源映射配置,将特定路径映射到服务器上的文件夹,确保新上传的图片能即时访问。例如,通过`addResourceHandler("/img/**").addResourceLocations("file:E:\\myProject\\forum_server\\")`配置,使前端可通过URL直接访问图片。

在开发一个基于Springboot的项目时,遇到了一个问题,那就是如何让前端访问到存储在后端项目中的图片,我首先想到的是Springboot的静态资源映射(后来发现不能用静态资源映射去解决我的需求)。

需求

前端上传了图片(例如头像)后,后端把图片存储了起来,然后需要返回访问该图片的URL,使前端(或浏览器)通过该URL显示该图片。

静态资源映射

后端把上传的图片存储在项目的static目录下:

然后写了一个配置类,去映射静态资源

java

代码解读

复制代码

@Configuration
public class WebConfig implements WebMvcConfigurer {

    //静态资源映射
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/static/**");
    }
}

然后运行项目,发现可以访问到 localhost:8089/img/avatar/3.jpg, 但是在项目运行过程中,在前端上传了4.jpg,但无法通过localhost:8089/img/avatar/4.jpg 去访问。于是我重启项目,代码没有改动,发现 localhost:8089/img/avatar/4.jpg 可以访问到了。

结论:Springboot的静态文件资源目录 static/ 下的文件的确可以访问到,前提是该文件在项目打成jar包前就存在,而我们运行Springboot项目,本质就是把java项目打包jar然后运行。而在项目运行过程中,新添加在static目录下的文件,根本就不在项目运行的jar包,所以根本无法访问得到。

所以头像等动态添加的文件是不可以放在static目录下,Springboot默认的静态资源映射是映射静态文件!即项目运行后就不会改变的文件。

文件映射(回显图片)

java

代码解读

复制代码

@Configuration
public class WebConfig implements WebMvcConfigurer {


    //资源映射
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        //资源映射, /img路由 对应机器上的E:/myProject/forum_server/
        // Springboot会自动去E:/myProject/forum_server/查找对应的文件
        registry.addResourceHandler("/img/**").addResourceLocations("file:E:\\myProject\\forum_server\\");
    }
}

可以通过 localhost:8089/img/avatar/3.jpg 去访问到图片。


转载来源:https://juejin.cn/post/7075626978245607431

相关文章
|
20天前
|
XML Java Maven
springboot-多环境配置文件
本文介绍了如何创建开发和生产环境的配置文件,并在IDEA和Maven中进行配置。开发环境中,通过设置profile为`dev`来指定配置文件;生产环境中,使用Maven命令参数`-Pprod`打包并指定配置文件。公共配置可放在`application.yml`中统一管理。日志配置需确保`logback-spring.xml`中的profile正确,以保证日志正常输出。
springboot-多环境配置文件
|
9天前
|
前端开发 Cloud Native Java
Java||Springboot读取本地目录的文件和文件结构,读取服务器文档目录数据供前端渲染的API实现
博客不应该只有代码和解决方案,重点应该在于给出解决方案的同时分享思维模式,只有思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
Java||Springboot读取本地目录的文件和文件结构,读取服务器文档目录数据供前端渲染的API实现
|
4月前
|
网络协议 Java
springboot配置hosts文件
springboot配置hosts文件
82 11
|
4月前
|
分布式计算 关系型数据库 MySQL
SpringBoot项目中mysql字段映射使用JSONObject和JSONArray类型
SpringBoot项目中mysql字段映射使用JSONObject和JSONArray类型 图像处理 光通信 分布式计算 算法语言 信息技术 计算机应用
94 8
|
3月前
|
XML 安全 Java
Spring Boot中使用MapStruct进行对象映射
本文介绍如何在Spring Boot项目中使用MapStruct进行对象映射,探讨其性能高效、类型安全及易于集成等优势,并详细说明添加MapStruct依赖的步骤。
104 0
|
4月前
|
存储 前端开发 JavaScript
|
4月前
|
JSON Java 数据格式
springboot中表字段映射中设置JSON格式字段映射
springboot中表字段映射中设置JSON格式字段映射
190 1
|
6月前
|
Java Spring
springboot静态资源目录访问,及自定义静态资源路径,index页面的访问
本文介绍了Spring Boot中静态资源的访问位置、如何进行静态资源访问测试、自定义静态资源路径和静态资源请求映射,以及如何处理自定义静态资源映射对index页面访问的影响。提供了两种解决方案:取消自定义静态资源映射或编写Controller来截获index.html的请求并重定向。
springboot静态资源目录访问,及自定义静态资源路径,index页面的访问
|
7月前
|
Java Spring
Spring Boot实战:静态资源无法访问
Spring Boot实战:静态资源无法访问
101 0
|
10月前
|
前端开发 JavaScript Java
Springboot静态资源访问、上传、回显和下载
Springboot静态资源访问、上传、回显和下载
396 0
Springboot静态资源访问、上传、回显和下载