SpringBoot3实现上传图片并返回路径让前端显示图片

 更新时间:2024年12月31日 10:14:39   作者:Harry技术  
这篇文章主要介绍了SpringBoot3实现上传图片并返回路径让前端显示图片,文中通过图文和代码讲解的非常详细,对大家的学习或工作有一定的帮助,需要的朋友可以参考下

Springboot 3 上传图片,并返回路径让前端显示图片

步骤:

1.利用SpringBoot写一个图片上传接口

2.接收前端传递过来的图片并保存到本地指定位置。

3.前端(浏览器)可以通过url访问上传过的图片

创建项目:

pom.xml 主要依赖

<properties>
    <java.version>17</java.version>
</properties>
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <optional>true</optional>
    </dependency>
</dependencies>

application.yml 配置一个图片上传地址,方便后续更改路径

upload:
  # 图片保存路径
  path: E:\img

写一个FileController用来接收前端提交的图片文件,并把图片保存到服务器的指定位置

/**
 * @author harry
 * @公众号 Harry技术
 */
@RestController
@RequestMapping("/upload")
public class FileController {

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


    @PostMapping
    public String uploadFile(@RequestParam("file") MultipartFile file) {
        try {

            if (file.isEmpty()) {
                return "文件为空,请重新选择!";
            }
            // 上传的图片
            File path = new File(uploadPath);
            if (!path.exists()) {
                // 创建完整的目录
                path.mkdirs();
            }
            // 获取文件原始名(包含后缀名)
            String originalName = file.getOriginalFilename();
            // 获取文件名(不包括后缀)
            String prefixName = originalName.substring(0, originalName.lastIndexOf("."));
            // 获取文件后缀 (包括.) 例如:.png
            String suffixName = originalName.substring(originalName.lastIndexOf("."));
            // 这是处理后的新文件名
            String fileName;
            if (originalName.contains(".")) {
                // 示例:avatar.123.png,经过处理后得到:avatar.123_1661136943533.png
                fileName = prefixName + "_" + System.currentTimeMillis() + suffixName;
            } else {
                return "上传图片格式错误,请重新选择!";
            }

            String savePath = path.getPath() + File.separator + fileName;

            File saveFile = new File(savePath);
            // 将上传的文件复制到指定目录
            FileCopyUtils.copy(file.getBytes(), saveFile);
            // 返回给前端的图片保存路径;前台可以根据返回的路径拼接完整地址,即可在浏览器上预览该图片
            String dest = "images" + File.separator + fileName;

            if (dest.contains("\\")) {
                dest = dest.replace("\\", "/");
            }
            return dest;
        } catch (IOException e) {
            return e.getMessage();
        }
    }
}

配置WebMvcConfigurer,在其addResourceHandlers方法中设置资源映射

/**
 * @author harry
 * @公众号 Harry技术
 */
@Configuration
public class InterceptorConfig implements WebMvcConfigurer {

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

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        // images 是访问图片资源的前缀,比如要访问test1.png
        // 则全路径为:http://localhost:端口号/images/test1.png
        registry.addResourceHandler("/images/**")
                //此处为设置服务端存储图片的路径(前端上传到后台的图片保存位置)
                .addResourceLocations("file:/" + uploadPath);
    }
}

编写前端进行测试,这里采用Apifox模拟图片上传,并在浏览器中访问打开

有的小伙伴在测试的时候,可能会出现打不开的情况,那你检查一下本地路径地址,不要有中文目录!!!

到此这篇关于SpringBoot3实现上传图片并返回路径让前端显示图片的文章就介绍到这了,更多相关SpringBoot3上传图片并返回路径内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • mybatis动态SQL if的test写法及规则详解

    mybatis动态SQL if的test写法及规则详解

    这篇文章主要介绍了mybatis动态SQL if的test写法及规则详解,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-01-01
  • Java上转型和下转型对象

    Java上转型和下转型对象

    这篇文章给大家讲述了Java上转型和下转型对象的详细用法以及相关的代码分享,有兴趣的朋友可以学习下。
    2018-03-03
  • 使用MyBatis拦截器实现sql查询权限动态修改代码实例

    使用MyBatis拦截器实现sql查询权限动态修改代码实例

    这篇文章主要介绍了使用MyBatis拦截器实现sql查询权限动态修改代码实例,为了不耦合,现在的方案是在需要鉴权的Mybatis Mapper方法上增加一个注解,在运行过程中判断该注解存在即对sql进行修改,需要的朋友可以参考下
    2023-08-08
  • SpringBoot整合Security安全框架实现控制权限

    SpringBoot整合Security安全框架实现控制权限

    本文主要介绍了SpringBoot整合Security安全框架实现控制权限,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-01-01
  • Java利用opencv实现用字符展示视频或图片的方法

    Java利用opencv实现用字符展示视频或图片的方法

    这篇文章主要介绍了Java利用opencv实现用字符展示视频或图片的方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-12-12
  • Springboot集成restTemplate过程详解

    Springboot集成restTemplate过程详解

    这篇文章主要介绍了Springboot集成restTemplate过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-04-04
  • 情人节写给女朋友Java Swing代码程序

    情人节写给女朋友Java Swing代码程序

    这篇文章主要为大家分享了情人节写给女朋友的java小程序,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,祝大家每天都是情人节
    2018-02-02
  • Mybatis源码解析之mapper接口的代理模式详解

    Mybatis源码解析之mapper接口的代理模式详解

    这篇文章主要介绍了Mybatis源码解析之mapper接口的代理模式详解,在mybatis中执行sql时有两种方式,一种是基于statementId,也就是直接调用SqlSession的方法,需要的朋友可以参考下
    2023-12-12
  • Java创建多线程的两种方式对比

    Java创建多线程的两种方式对比

    在Java中创建线程的方式有两种,第一种是直接继承Thead类,另一种是实现Runable接口。那么这两种方式孰优孰劣呢?这就是本文需要探讨的内容范畴了,看官们请仔细向下看
    2014-10-10
  • Java并发编程中的Exchanger解析

    Java并发编程中的Exchanger解析

    这篇文章主要介绍了Java并发编程中的Exchanger解析,Exchanger用于线程间数据的交换,它提供一个同步点,在这个同步点,两个线程可以交换彼此的数据,这两个线程通过exchange方法交换数据,如果第一个线程先执行exchange()方法,需要的朋友可以参考下
    2023-11-11

最新评论