spring boot实现上传图片并在页面上显示及遇到的问题小结

下面我会详细讲解“spring boot实现上传图片并在页面上显示及遇到的问题小结”的完整攻略。

1. 准备工作

在开始实现上传图片并在页面上显示之前,我们需要先准备好以下的环境和工具:

2. 实现上传图片

在Spring Boot中实现上传图片的方式很多,这里我们以常用的MultipartFile为例。假设我们的上传页面是/upload,在这个页面中,用户可以选择要上传的图片,然后点击上传按钮,将图片上传到服务器。接下来是实现代码:

2.1 HTML页面代码

首先是上传页面的HTML代码,使用了Bootstrap和Thymeleaf的模板引擎:

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
  <meta charset="UTF-8">
  <title>上传图片</title>
  <link rel="stylesheet" href="https://cdn.staticfile.org/twitter-bootstrap/4.5.0/css/bootstrap.min.css">
  <script src="https://cdn.staticfile.org/jquery/3.5.1/jquery.min.js"></script>
</head>
<body>
<div class="container mt-3">
  <h2>上传图片</h2>
  <form th:action="@{/upload}" th:method="post" enctype="multipart/form-data">
    <div class="form-group">
      <label>选择图片</label>
      <input type="file" name="file" class="form-control-file" accept="image/png, image/jpeg">
    </div>
    <button type="submit" class="btn btn-primary">上传</button>
  </form>
</div>
</body>
</html>

关键代码:

  • enctype="multipart/form-data":用于支持文件上传。
  • accept="image/png, image/jpeg":限制只能上传PNG或JPEG格式的图片。

2.2 Controller的实现

然后是Controller的实现代码:

import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.MediaType;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.util.FileCopyUtils;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;

@Controller
public class UploadController {
    @Value("${file.upload-dir}")
    private String uploadDir;

    @GetMapping("/upload")
    public String uploadPage() {
        return "upload";
    }

    @PostMapping(value = "/upload", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
    public String uploadFile(@RequestParam("file") MultipartFile file, Model model) throws IOException {
        // 上传文件
        String fileName = file.getOriginalFilename();
        File targetFile = new File(uploadDir + File.separator + fileName);
        FileCopyUtils.copy(file.getBytes(), targetFile);

        // 将文件名放入Model返回页面
        model.addAttribute("fileName", fileName);
        return "result";
    }
}

关键代码:

  • @RequestParam("file") MultipartFile file:用于接收前端上传的文件。
  • FileCopyUtils.copy(file.getBytes(), targetFile);:将上传的文件保存到指定的目录。

2.3 配置文件

我们需要在配置文件中配置文件上传目录:

file.upload-dir=/path/to/your/upload/dir

2.4 上传成功页面

最后是上传成功页面(返回的Model中带有文件名):

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
  <meta charset="UTF-8">
  <title>上传成功</title>
  <link rel="stylesheet" href="https://cdn.staticfile.org/twitter-bootstrap/4.5.0/css/bootstrap.min.css">
</head>
<body>
<div class="container mt-3">
  <h2>上传成功</h2>
  <div class="alert alert-success" role="alert">
    <p>您上传的文件是:<span th:text="${fileName}"></span></p>
    <p>您可以在以下位置查看您的文件:</p>
    <pre class="alert-pre border bg-light p-2"><code>/path/to/your/upload/dir/<span th:text="${fileName}"></span></code></pre>
  </div>
</div>
</body>
</html>

OK,当我们访问/upload页面,选择好图片并上传之后,就会自动跳转到上传成功页面,展示上传的文件名和保存路径。

3. 实现显示图片

实现上传图片后,我们还需要将上传的图片显示在页面上。这里为了方便,我们使用一个简单的图片预览功能,当用户选择上传图片后,会在上传页面上预览显示该图片。

3.1 HTML页面代码

首先是上传页面的HTML代码,我们需要在页面上加入一个img标签,在用户选择图片后更新该img的src属性,从而达到实时预览图片的效果。

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
  <meta charset="UTF-8">
  <title>上传图片</title>
  <link rel="stylesheet" href="https://cdn.staticfile.org/twitter-bootstrap/4.5.0/css/bootstrap.min.css">
  <script src="https://cdn.staticfile.org/jquery/3.5.1/jquery.min.js"></script>
  <script>
    // 实时预览图片
    $(function () {
      $("#file").change(function () {
        var img = $("#preview");
        img.attr("src", window.URL.createObjectURL(this.files[0]));
      });
    });
  </script>
</head>
<body>
<div class="container mt-3">
  <h2>上传图片</h2>
  <form th:action="@{/upload}" th:method="post" enctype="multipart/form-data">
    <div class="form-group">
      <label>选择图片</label>
      <input type="file" id="file" name="file" class="form-control-file" accept="image/png, image/jpeg">
    </div>
    <div class="form-group">
      <img id="preview" src="#" alt="预览" class="img-fluid" style="max-width: 100%">
    </div>
    <button type="submit" class="btn btn-primary">上传</button>
  </form>
</div>
</body>
</html>

关键代码:

  • $(function () {...});:利用jQuery实现实时对img标签的属性src进行更新。

3.2 Controller的实现

然后是Controller的实现代码,我们需要在上传成功后,将上传的图片文件路径保存在Model中,返回到展示图片的页面,在页面中通过路径,显示出上传的图片。

import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.MediaType;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.util.FileCopyUtils;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;

@Controller
public class UploadController {
    @Value("${file.upload-dir}")
    private String uploadDir;

    @GetMapping("/upload")
    public String uploadPage() {
        return "upload";
    }

    @PostMapping(value = "/upload", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
    public String uploadFile(@RequestParam("file") MultipartFile file, Model model) throws IOException {
        // 上传文件
        String fileName = file.getOriginalFilename();
        File targetFile = new File(uploadDir + File.separator + fileName);
        FileCopyUtils.copy(file.getBytes(), targetFile);

        // 将文件名放入Model返回页面
        model.addAttribute("fileName", fileName);
        model.addAttribute("filePath", "/uploads/" + fileName);
        return "result";
    }
}

关键代码:

  • model.addAttribute("filePath", "/uploads/" + fileName);:将上传的文件路径带入Model,供图片展示页面获取。

3.3 静态文件配置

接下来,我们需要在Spring Boot的配置文件中,配置静态资源目录。在配置文件中,我们添加以下配置:

spring.resources.static-locations=file:/path/to/your/upload/dir/

这里,我们设置静态资源目录为上传的图片所在的目录。

3.4 图片展示页面

最后,我们需要创建一个图片展示页面,用于展示上传的图片。这个页面需要使用到Bootstrap和Thymeleaf的模板引擎,而图片的展示使用了img标签。

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
  <meta charset="UTF-8">
  <title>上传成功</title>
  <link rel="stylesheet" href="https://cdn.staticfile.org/twitter-bootstrap/4.5.0/css/bootstrap.min.css">
</head>
<body>
<div class="container mt-3">
  <h2>上传成功</h2>
  <div class="row">
    <div class="col-md-3">
      <div class="card">
        <img th:src="@{${filePath}}" class="card-img-top" alt="...">
        <div class="card-body">
          <h5 class="card-title" th:text="${fileName}"></h5>
        </div>
      </div>
    </div>
  </div>
</div>
</body>
</html>

关键代码:

  • th:src="@{${filePath}}":利用Thymeleaf实现图片路径的动态获取。

这样,我们就实现了上传图片并在页面上显示的功能。

4. 遇到的问题小结

在实现上传图片并在页面上显示的过程中,我们可能会遇到以下问题:

  • 上传文件大小限制问题:可以在Spring Boot的配置文件中,设置MultipartFile的上传文件大小限制。
  • 图片文件格式限制问题:可以在HTML页面中设置accept属性限制文件格式,也可以在Controller中使用MultipartFile的getContentType()方法限制,或者使用第三方工具。

总结起来,这个功能的主要难点点有:

  • 如何支持文件上传并处理文件:这个问题通过使用MultipartFile实现较为方便。
  • 如何将上传的文件名或路径返回到页面:这个问题需要使用Controller将上传后的文件名或路径放入Model中,然后页面通过${}表达式获取。
  • 如何显示图片:这个问题需要在上传成功后,将图片路径放入Model中,然后在展示图片的页面,使用img标签进行显示。

以上是实现上传图片并在页面上显示的完整攻略,希望对您有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:spring boot实现上传图片并在页面上显示及遇到的问题小结 - Python技术站

(0)
上一篇 2023年5月20日
下一篇 2023年5月20日

相关文章

  • IDEA Maven Mybatis generator 自动生成代码(实例讲解)

    下面是详细讲解“IDEA Maven Mybatis generator 自动生成代码(实例讲解)”的完整攻略。 简介 Maven Mybatis generator 是一种可以帮助开发者自动生成 Mybatis 相关代码的工具。它可以根据数据库表的结构,自动生成实体类、Mapper 接口以及 XML Mapper 文件,大大提高了代码编写的效率。 本攻略将…

    Java 2023年5月19日
    00
  • Spring Boot 整合 Reactor实例详解

    在Spring Boot应用程序中,我们可以使用Reactor来实现响应式编程。以下是实现Spring Boot整合Reactor的完整攻略: 添加依赖 在Spring Boot应用程序中,我们需要添加以下依赖来使用Reactor: <dependency> <groupId>io.projectreactor</groupId…

    Java 2023年5月15日
    00
  • 在IDEA中安装MyBatis Log Plugin插件,执行mybatis的sql语句(推荐)

    接下来我将详细讲解在IDEA中安装MyBatis Log Plugin插件的过程及使用方法。 步骤一:安装MyBatis Log Plugin插件 打开IDEA,从菜单栏选择“File” > “Settings”(或者使用快捷键“Ctrl + Alt + S”)。 在弹出的窗口中选择“Plugins”,然后点击“Browse repositories”…

    Java 2023年5月20日
    00
  • Java之SpringBoot定时任务案例讲解

    下面是关于“Java之SpringBoot定时任务案例讲解”的完整攻略。 简介 在实际的项目中,我们时常需要定时执行一些任务,比如数据统计、数据备份、消息通知等。SpringBoot提供了很好的定时任务支持,本文将着重介绍如何使用SpringBoot实现定时任务,并提供两个示例。 步骤 1.依赖添加 在pom.xml文件中添加以下依赖: <depend…

    Java 2023年5月19日
    00
  • notepad++支持什么语言? notepad语言格式设置技巧

    关于”Notepad++支持什么语言”和”Notepad语言格式设置技巧”,以下是详细攻略: Notepad++支持哪些编程语言? Notepad++是一款常用的文本编辑器,它支持多种编程语言和标记语言。下面是Notepad++支持的一些主要编程语言: C、C++、C#、Java、Python、Ruby等大部分主流编程语言。 HTML、CSS、JavaScr…

    Java 2023年6月15日
    00
  • SpringMVC REST风格深入详细讲解

    SpringMVC REST 风格深入详细讲解 什么是 RESTful API? RESTful 是以表述性状态转移(Representational State Transfer,缩写 REST)为核心的架构风格,所有的设计都以此为中心。在 RESTful 风格的 API 设计中,使用标准的 HTTP 方法(GET, POST, PUT, DELETE)来…

    Java 2023年5月16日
    00
  • Spring Boot+微信小程序开发平台保存微信登录者的个人信息

    好的。本文将详细介绍如何使用Spring Boot和微信小程序开发平台来保存微信登录者的个人信息。 1. 创建小程序应用 在开始之前,你需要先申请一个微信小程序应用,具体操作请参考微信小程序官方文档。 2. 配置微信小程序开发平台 在微信小程序开发平台中配置小程序的信息。其中,需要配置小程序的 AppID 和 App Secret ,以及配置小程序的登录授权…

    Java 2023年5月20日
    00
  • SpringBoot 实现自定义的 @ConditionalOnXXX 注解示例详解

    SpringBoot 实现自定义的 @ConditionalOnXXX 注解示例详解 在 Spring Boot 应用程序中,我们可以使用 @ConditionalOnXXX 注解来控制自动配置是否生效。例如,@ConditionalOnClass 注解可以在 classpath 中存在指定的类时生效,@ConditionalOnMissingBean 注解…

    Java 2023年5月15日
    00
合作推广
合作推广
分享本页
返回顶部