SpringBoot 项目中的图片处理策略:本地存储与路径映射

一、前言

  在做网页的时候,会经常遇到一个问题,那就是如何在前端访问图片,还有就是图片应该如何存?存在数据库,然后直接把文件发给前端?数据库表示:"哥们你可真行,我快装不下了"。比较好一点的做法就是把图片存在本地*(ps:这里不考虑云存储)*,然后数据库存该文件的路径。这样一来前端如何访问这个文件呢?我们都知道在SpringBoot项目中,静态资源都存放在static目录下,使得前端可以通过URL来访问这些资源,现在我们就需要将文件系统的文件路径与 URL 建立一个映射关系,把文件系统中的文件当成我们的静态资源即可。下面开始演示:

二、演示

  本篇的重点是如何通过 URL 来访问服务器的文件系统中的文件,这里就不使用数据库了。

  1. 我们创建一个SpringBoot项目,依赖如下:
xml 复制代码
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
  1. 在static目录下,我们可以直接通过 URL 来访问,该目录下有一个/image/avatar.png文件

我们现在的目标是:假设在D/image目录下有一个图片,如何直接通过URL来访问本地文件呢?

  1. 在 application.properties配置文件中定义图片存放的位置
java 复制代码
# 图片保存路劲
imagepath=D:/image/
  1. 创建一个类实现WebMvcConfigurer接口并重写addResourceHandlers方法。
java 复制代码
@Configuration
public class InterceptorConfig implements WebMvcConfigurer {
    
    @Value("${imagepath}")
    private String imagePath;//从配置文件中获取文件路径

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/image/**")
                .addResourceLocations("file:" + imagePath);
    }
}
  • addResourceHandler("/image/**"):定义了一个URL模式,即以 "/image/" 开头的请求路径。任何匹配该模式的请求都将被映射到相应的静态资源。
  • .addResourceLocations("file:" + imagepath):指定了实际存储静态资源的文件系统路径,"file:" 前缀告诉Spring MVC,这是一个文件系统路径。
  • 这段代码的作用是告诉Spring MVC,当接收到以 "/image/" 开头的请求时,去指定的文件系统路径imagepath(D/image/)查找对应的静态资源。例如:当请求 "/image/test.jpg" 时,Spring MVC 将会尝试在 "D/image/" 目录下查找并返回 "test.jpg" 这个文件作为响应。
  1. 在"D/image/"下保存一个图片
  1. 访问http://localhost:8080/image/test.png

  可以看到映射成功了,其实在数据库中存的就是"/image/"+imageName。如果你要将项目部署到Linux服务器上,需要把文件目录修改成Linux系统的,比如:

properties 复制代码
imagepath=/root/soft/images/
相关推荐
独泪了无痕8 小时前
Spring Data Redis 快速上手
spring boot·redis·后端
Thomas.Sir10 小时前
第9课:SpringBoot4.x Web开发基础:WebMvc自动配置、静态资源、请求参数接收
java·spring boot
VimorphTech15 小时前
一段字幕太长,怎样拆句并安排显示时间?
java·spring boot
万联WANFLOW15 小时前
Kimi K3.1 Pro 接口接入指南:模型选型、费用计算与零数据保留
java·spring boot·python·安全·spring·大模型
aiks_yuan15 小时前
Spring AI 2.1 ChatMemory 已过时用什么替代:迁移到 Session Memory 实战(JDBC 存储与会话压缩)
spring boot
博风17 小时前
Springboot4.0.9,添加Filter(拦截器)
spring boot
Java内核笔记19 小时前
同一份知识库,4 种切分 × 3 种召回,纯关键词比纯向量高 13 个点
java·人工智能·spring boot
学长毕设21 小时前
基于springboot的社会志愿者管理系统-附源码
java·spring boot·后端
计算机编程-吉哥1 天前
计算机毕业设计 基于 SpringBoot + Vue 的剧本杀系统 Java毕业设计【任务书、开题报告、中期报告、论文、源码】
java·vue.js·spring boot·毕业设计·课程设计·计算机毕业设计选题
这里是杨杨吖1 天前
SpringCloud+Vue民宿房屋租赁系统 附带详细运行指导视频
vue.js·spring boot·spring cloud·房屋·民宿租赁