利用Springboot+vue实现图片上传至数据库并显示的全过程

下面是利用Spring Boot和Vue实现图片上传至数据库并显示的全过程。

前置准备

技术栈

  • Spring Boot
  • Vue.js
  • axios
  • ElementUI
  • MySQL
  • MyBatis

下载代码

可以从GitHub上下载示例代码:https://github.com/KevinPang2019/springboot-vue-image-upload

实现步骤

1. 创建数据库表

在MySQL中创建一个名为image的数据库,然后在该数据库下创建一个名为image_info的表,包含ID、图片名称和图片内容三个字段。其中ID为自增主键。

CREATE DATABASE image;
USE image;
CREATE TABLE `image_info` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) DEFAULT NULL,
  `content` longblob,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;

2. 创建Spring Boot项目

使用Spring Initializr创建一个Spring Boot项目,并添加如下依赖项:

  • Spring Web
  • Spring Data JPA
  • MySQL Driver
  • Lombok

application.properties文件中添加如下配置:

spring.datasource.url=jdbc:mysql://localhost:3306/image?serverTimezone=UTC&useUnicode=true&characterEncoding=utf8
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

spring.jpa.hibernate.ddl-auto=update
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect

server.port=8080

3. 创建后端接口

3.1 Entity类

创建一个名为Image的实体类,包含ID、图片名称和图片内容三个字段,并添加@Entity@Table注解。

@Entity
@Table(name = "image_info")
@Data
public class Image {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String name;

    @Lob
    @Basic(fetch = FetchType.LAZY)
    private byte[] content;
}

3.2 Dao接口

创建一个名为ImageDao的接口,继承JpaRepository,并在其中添加自定义方法。

public interface ImageDao extends JpaRepository<Image, Long> {
    Image findByName(String name);
}

3.3 Service类

创建一个名为ImageService的类,实现增加图片、获取图片列表和获取单个图片的功能。

@Service
public class ImageService {
    @Autowired
    private ImageDao imageDao;

    public void addImage(Image image) {
        imageDao.save(image);
    }

    public List<Image> getImages() {
        return imageDao.findAll();
    }

    public Image getImage(String name) {
        return imageDao.findByName(name);
    }
}

3.4 Controller类

创建一个名为ImageController的类,实现图片上传、获取图片列表和获取单张图片的接口。

@RestController
@RequestMapping("/image")
public class ImageController {
    @Autowired
    private ImageService imageService;

    @PostMapping("/upload")
    public void uploadImage(@RequestParam("file") MultipartFile file) {
        try {
            Image image = new Image();
            image.setName(file.getOriginalFilename());
            image.setContent(file.getBytes());
            imageService.addImage(image);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    @GetMapping("/list")
    public List<Image> getImageList() {
        return imageService.getImages();
    }

    @GetMapping("/{name}")
    public ResponseEntity<byte[]> getImage(@PathVariable String name) {
        Image image = imageService.getImage(name);
        if (image == null) {
            return ResponseEntity.notFound().build();
        }
        return ResponseEntity.ok().contentType(MediaType.IMAGE_JPEG).body(image.getContent());
    }
}

4. 创建Vue项目

使用Vue CLI创建一个Vue项目,并添加如下依赖项:

  • axios
  • ElementUI

5. 创建前端页面

5.1 App.vue

App.vue中,添加选择文件和上传文件的功能,并显示上传进度和上传结果。

<template>
  <el-container>
    <el-header style="background-color: #B3C0D1; text-align: center;">
      <h3>Spring Boot + Vue Image Upload</h3>
    </el-header>
    <el-main>
      <div class="upload-container">
        <el-upload ref="upload" :action="uploadUrl" :on-success="uploadSuccess"
                   :on-progress="uploadProgress" :show-file-list="false">
          <el-button size="small">{{ buttonText }}</el-button>
        </el-upload>
        <el-progress type="circle" :percentage="uploadPercentage" color="#409EFF"
                     v-if="showUploadProgress"></el-progress>
        <p v-if="uploadResult">{{ uploadResult }}</p>
      </div>
    </el-main>
  </el-container>
</template>

<script>
import axios from 'axios'

export default {
  name: 'app',
  data() {
    return {
      buttonText: '选择文件',
      uploadUrl: 'http://localhost:8080/image/upload',
      showUploadProgress: false,
      uploadPercentage: 0,
      uploadResult: ''
    }
  },
  methods: {
    uploadSuccess(response) {
      this.showUploadProgress = false
      this.uploadPercentage = 0
      this.uploadResult = response.data
    },
    uploadProgress(event) {
      if (event.total > 0) {
        this.showUploadProgress = true
        this.uploadPercentage = parseInt(event.loaded / event.total * 100)
      }
    }
  }
}
</script>

<style scoped>
.upload-container {
  text-align: center;
  margin-top: 20px;
}
</style>

5.2 main.js

main.js中,添加导入ElementUI和设置axios的功能。

import Vue from 'vue'
import App from './App.vue'
import ElementUI from 'element-ui'
import 'element-ui/lib/theme-chalk/index.css'
import axios from 'axios'

Vue.use(ElementUI)

axios.defaults.baseURL = 'http://localhost:8080'
Vue.prototype.$http = axios

Vue.config.productionTip = false

new Vue({
  render: h => h(App)
}).$mount('#app')

6. 运行项目

在命令行中分别进入Spring Boot项目和Vue项目所在的文件夹,分别输入mvn spring-boot:runnpm run serve命令来启动项目。然后在浏览器中打开http://localhost:8081即可看到页面。

7. 示例说明

示例1:上传图片

  1. 点击“选择文件”按钮,选择一张图片文件。
  2. 点击“上传文件”按钮,上传文件。
  3. 上传进度条显示上传进度,上传完成后会显示“上传成功”。
  4. 在MySQL数据库中查看image_info表,可以看到图片已经被保存到数据库中。

示例2:显示图片

  1. 在“http://localhost:8081”,可以看到上传的图片列表。
  2. 点击图片名称,可以在页面中显示该张图片。

综上所述,这就是利用Spring Boot和Vue实现图片上传至数据库并显示的全过程。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:利用Springboot+vue实现图片上传至数据库并显示的全过程 - Python技术站

(0)
上一篇 2023年6月1日
下一篇 2023年6月1日

相关文章

  • Java中数字相关的类有哪些?Nuber数字类和Math数学类详解

    前言 我们在解决实际问题时,会经常对数字、日期和系统设置进行处理,比如在我们的代码中,经常会遇到一些数字&数学问题、随机数问题、日期问题和系统设置问题等。 为了解决这些问题,Java给我们提供了多个处理相关问题的类,比如Number类、Math类、Random类、BigInteger类、BigDecimal类、Date类、System类等。 接下来我…

    Java 2023年5月5日
    00
  • java Apache poi 对word doc文件进行读写操作

    下面是Java Apache POI对Word Doc文件进行读写操作的攻略,包含以下步骤: 步骤一:引入Apache POI库 使用Maven来引入Apache POI需要添加以下依赖: <dependency> <groupId>org.apache.poi</groupId> <artifactId>po…

    Java 2023年5月19日
    00
  • Idea工具中创建 SpringBoot工程及入门详解

    Idea工具中创建SpringBoot工程及入门详解 SpringBoot是一个非常流行的Java Web框架,它可以帮助我们快速构建Web应用程序。本文将详细讲解在Idea工具中创建SpringBoot工程及入门详解的完整攻略,并提供两个示例。 1. 创建SpringBoot项目 在开始之前,我们需要先创建一个SpringBoot项目。以下是一个简单的示例…

    Java 2023年5月15日
    00
  • java实现简单的计算器类实例

    下面是Java实现简单的计算器类实例的攻略: 步骤1:创建Calculator类 首先我们需要创建一个Calculator类,这个类将会有4个方法add, subtract, multiply和 divide,这些方法将用于执行加法、减法、乘法和除法操作。 public class Calculator { // 加法 public double add(d…

    Java 2023年6月15日
    00
  • 几道和「黑洞照片」那种海量数据有关的算法问题

    这个话题涉及到海量数据处理和算法问题,我会尽可能详细地解释来帮助大家了解。 大数据处理的常用算法 排序算法 排序是大数据处理中最常用的算法之一。这是因为,在许多情况下,我们需要对从数据库中获取的大量数据进行排序,以便更好地分析和使用它们。以下是一些常用的排序算法: 冒泡排序:这是一种简单的排序算法,在较小的数据集中表现良好,但对于大规模数据集则效率较低。 快…

    Java 2023年5月19日
    00
  • eclipse连接数据库并实现用户注册登录功能

    首先需要明确的是,eclipse并不能直接连接数据库,需要借助一些工具和驱动才能实现。以下是连接数据库并实现用户注册登录功能的完整攻略: 环境准备 安装JDK、eclipse、MySQL数据库(或其他支持JDBC的数据库) 下载并安装MySQL JDBC驱动包(类似于mysql-connector-java.jar) 创建一个Java项目,设置好项目的cla…

    Java 2023年5月20日
    00
  • 详解SpringBoot和Mybatis配置多数据源

    下面详细讲解一下关于“详解SpringBoot和Mybatis配置多数据源”的完整攻略。 一、为什么需要配置多数据源? 在实际的项目中,我们很有可能需要同时访问多个数据库,而这些数据库可能是不同类型的,比如 MySQL 和 Redis,因此需要在 Spring Boot 和 Mybatis 的框架基础上实现多数据源配置。 二、配置过程 首先,在 pom.xm…

    Java 2023年5月20日
    00
  • Spring零基础入门WebFlux响应式编程

    Spring零基础入门WebFlux响应式编程攻略 什么是WebFlux? WebFlux是Spring框架5.0版本引入的新特性,它是基于响应式编程模型的Web框架,具有高可扩展性、高并发性等优势。 必备技能要求 在学习WebFlux前,需要掌握以下技能: Spring基础知识,如IoC/DI、AOP等概念 Java 8的Lambda表达式和Stream …

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