图片对象列表查询与展示(vue+springboot+elementUI)

news2024/11/15 19:51:18

本文描述场景为
展示:后端从数据库中查询图片对象列表,返回前端展示

多图片展示

先看一下后端表实体

import com.zpmc.common.domain.BaseEntity;
import io.swagger.annotations.ApiModel;
import lombok.*;

import javax.persistence.*;
import java.io.Serializable;
import java.sql.Blob;

@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@Builder
@ApiModel
@Entity
@Table(name = "tb_image")
public class Image extends BaseEntity implements Serializable {
    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;

    @Column(name = "task_id")
    private Integer taskId;

    @Column(name = "directory", length = 200)
    private String directory;


    @Column(name = "file")
    private Blob file;

    @Column(name = "remark", length = 200)
    private String remark;

    @Column(name = "STATUS", length = 200)
    private Integer status;

}

显然,图片在数据库中使用的是Blob类型,本人数据库用的是MediumBlob。

MySQL的四种BLOB类型
类型 大小(单位:字节)
TinyBlob 最大 255
Blob 最大 65K
MediumBlob 最大 16M
LongBlob 最大 4G

思路

  1. Blob属性先转成字节数组
  2. 字节数组转成base64字符串
  3. 前端接收base64解析展示

当然,后端返回给前端,还差个VO,因为Blob类型没法传。

后端

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@NoArgsConstructor
@AllArgsConstructor
public class ImageVO {
    private static final long serialVersionUID = 1L;
    private Integer id;
    private Integer taskId;
    private String directory;
    private String file;
    private String remark;
    private Integer status;
}

Controller层

    @ApiOperation("查看图片列表")
    @GetMapping("getImageList")
    public Result getImageList() throws Exception {
        return imageService.getImageList();
    }

Service层

    @Override
    public Result getImageList() throws SQLException {
        List<ImageVO> voList=new ArrayList<>();
        List<Image> all = imageRepo.findAll();
        for (Image item : all) {
            ImageVO vo = new ImageVO();
            vo.setId(item.getId());
            vo.setDirectory(item.getDirectory());
            vo.setRemark(item.getRemark());
            vo.setStatus(item.getStatus());
            vo.setTaskId(item.getTaskId());
            Blob blob = item.getFile();
            // 将 Blob 数据转换为字节数组
            byte[] data = blob.getBytes(1, (int) blob.length());
            // 将字节数组转换为 Base64 编码字符串
            vo.setFile(Base64.getEncoder().encodeToString(data));
            voList.add(vo);
        }
        return Result.success(voList);
    }

前端

<div v-for="image in images" :key="image.id" style="display: inline-block;">
          <el-image class="selectEffect" :src="image.file" :fit="fit" alt="加载失败" :title="image.id" style="width: 200px; height: 200px; margin-right: 10px;cursor: pointer;"
            @click="handleImageClick(image)">
          </el-image>
          <div>
            <center>
              {{ image.id }}
              <!-- {{ image.file }} -->
              <input type="checkbox" v-model="selectedImages" :value="image">
            </center>
          </div>
  data() {
    return {
      fit: "fill",
      selectedImages: [],
      images: [],
    };
  },
    beforeDestroy() {
    // 在组件销毁前,释放URL对象
    // URL.revokeObjectURL(this.image);
    for (let i = 0; i < this.images.length; i++) {
      URL.revokeObjectURL(this.images[i].file);
    }
  },
    methods: {
    getImageList() {
      Image.getImageList()
        .then((res) => {
          let arr = res.data;
          for (let i = 0; i < arr.length; i++) {
            arr[i].file = "data:image/png;base64," + arr[i].file;
          }
          this.images = arr;
          console.log("---------------");
          console.log(this.images);
          console.log("---------------");
        })
        .catch((err) => {
          console.log("err", err);
        });
    }
   }

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/459035.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

8086汇编之乘法指令MUL

2023年4月22日&#xff0c;周六晚上。 今天写汇编作业的时候&#xff0c;碰到了MUL指令&#xff0c;于是把学习到的MUL指令知识记录下来&#xff0c;也可以通过写这篇博客彻底理清MUL指令。 当被乘数和乘数都是8位时&#xff1a; 怎么判断被乘数和乘数是不是8位的&#xff1f…

操作系统之认识进程

目录 什么是进程 进程的状态和转换 进程控制 进程通信 什么是进程 在电脑的任务管理器中&#xff0c;能看到电脑当前运行着的所有进程 那到底什么是进程呢&#xff1f;和我们所看所写的那些程序有什么区别&#xff1f; 操作系统是如何区分这些进程的呢&#xff1f; 那就需要…

银河麒麟(桌面版和服务器版)之远程桌面安装

一、前言 在信创方案中经常介绍支持麒麟系统&#xff0c;实际上麒麟分为银河麒麟和中标麒麟&#xff0c;银河麒麟又分为服务器版和桌面版&#xff0c;服务器器版一般用于应用系统部署&#xff0c;桌面版一般用于日常办公。银河麒麟操作系统作为国产操作系统&#xff0c;是目前国…

java定时任务schedule

在 Java中&#xff0c;可以使用定时任务&#xff08;schedule&#xff09;来实现定时任务。这种定时任务能够根据用户的需求进行时间的控制&#xff0c;让用户可以自由设定每一个任务的开始时间和结束时间。 下面来介绍如何使用 java中的定时任务来实现定时任务。 首先需要在配…

# 将pg日志导入pg数据库的几种方法

将pg日志导入pg数据库的几种方法 文章目录 将pg日志导入pg数据库的几种方法1 方法1&#xff1a;官方方法&#xff08;fiel_fdw&#xff09;1.1 创建file_fdw数据源&#xff08;在此之前需要安装pg的file_fdw扩展&#xff09;1.2 创建外部表并导入数据 2 方法2&#xff1a;用csv…

会议论文与期刊论文的写作差异

AI领域的会议论文和期刊论文在撰写方法上存在一定的差异&#xff0c;读者需要理解这些差异&#xff0c;才能做到有的放矢&#xff0c;提高论文的命中率。如果按照会议论文的风格来写期刊论文&#xff0c;或者按照期刊论文的风格来写会议论文&#xff0c;论文命中的概率将大大降…

服务(第十三篇)lvs(负载均衡器)+nginx(反向代理)+tomcat(后端服务器)+nfs共享

准备6台机器&#xff1a; 192.168.169.10 lvs负载均衡器 192.168.169.20、192.168.169.30 nginx反向代理 192.168.169.40&#xff08;tomcat多实例&#xff09;192.168.169.50&#xff08;tomcat&#xff09; 19.168.169.60&#xff08;nfs共享&#xff09; 实验没啥好说的…

新建项目提交到git指定仓库

新建的项目如何上传到git远程仓库&#xff1a; 1&#xff1a;首先进入需要上传的文件夹&#xff0c;鼠标右键点击Git Bash Here 2&#xff1a;输入git init&#xff0c;初始化git相关配置文件 git init3&#xff1a;输入git remote add origin 你的远程仓库地址&#xff0c;…

收废品小程序的推广策略与实践

随着互联网和移动设备的普及&#xff0c;各种小程序逐渐成为了人们生活中不可或缺的一部分。在这样的背景下&#xff0c;开发一个收废品小程序是一个具有巨大潜力的创意。本文将介绍如何开发一个收废品小程序&#xff0c;并分享一些推广策略和实践经验。 开发一个收废品小程序…

推荐好用的数据库软件sql studio

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言免费功能强大支持数据导入和导出和navicat功能相同 一、sql studio是什么&#xff1f;二、使用步骤1.下载软件2. window版本3.linux 版本配置方式3.如何使用sql…

论文浅尝 | 基于交互模态融合的多模态知识图谱补全

笔记整理&#xff1a;张溢驰&#xff0c;浙江大学硕士&#xff0c;研究方向为多模态知识图谱 链接&#xff1a;https://arxiv.org/abs/2303.10816 动机 多模态知识图谱补全需要将多种模态的信息&#xff08;如图像和文本&#xff09;融入到实体的结构表示中&#xff0c;以此来实…

OpenAI ChatGPT 能取代多少程序员的工作?导致失业吗?

阅读原文&#xff1a;https://bysocket.com/openai-chatgpt-vs-developer/ ChatGPT 能取代多少程序员的工作&#xff1f;导致我们程序员失业吗&#xff1f;这是一个很好的话题&#xff0c;我这里分享下&#xff1a; 一、ChatGPT 是什么&#xff1f;有什么作用 ChatGPT是一种…

操作系统课堂笔记

第一章概述 操作系统&#xff08;Operating System, OS&#xff09;是计算机系统中最重要的系统软件&#xff0c;它统一管理计算机系统的硬件资源与信息资源&#xff0c;控制与调度上层软件的执行并为其提供易于使用的接口。 1.1计算机系统 操作系统在计算机系统中的地位&…

Java学习-MySQL-索引

Java学习-MySQL-索引 索引分类 索引&#xff08;Index&#xff09;是帮助MySQL高效获取数据的数据结构。 1.主键索引&#xff08;Primary Key&#xff09;&#xff0c;唯一标识&#xff0c;不可重复&#xff0c;并且只能有一个字段可以作为主键。 2.唯一索引&#xff08;Uniq…

地热井监测控制系统解决方案

概述 地热井监测控制系统主要是对地热井采水和回灌进行流量、温度、水位&#xff08;压力&#xff09;等参数的实时监测&#xff0c;对地热站现场环境进行实时视频监控。地热井现场和取水井、回灌井安装监测装置&#xff0c;通过无线传输设备将数据实时传输至自然资源局已建中…

【Leetcode -141.环形链表 -2.两数相加】

Leetcode Leetcode -141.环形链表Leetcode -2.两数相加 Leetcode -141.环形链表 题目&#xff1a;给你一个链表的头节点 head &#xff0c;判断链表中是否有环。 如果链表中有某个节点&#xff0c;可以通过连续跟踪 next 指针再次到达&#xff0c;则链表中存在环。 为了表示给…

第二届易派客工业品展圆满落幕 3天超7万人次观展

4月15日&#xff0c;第二届易派客工业品展览会在苏州国际博览中心成功闭幕&#xff0c;展会期间共7.4万人次观展。展会以“绿色•智造•融通•赋能”为主题&#xff0c;为参展企业衔接供需、共享商机、共促发展提供平台&#xff0c;推动工业企业数字化转型、致力供应链优化升级…

AntdesignVue 局部全屏后Message、Select 、Modal、Date等组件不显示问题解决方案(最终版)

1、对this.$message.....这种的消息提示组件解决方案如下 在main.js中全局配置消息提示 //单独引用需修改的元素 import { message } from ant-design-vue message.config({maxCount: 1,getContainer:() > document.getElementById(showBigModal) || document.body //父组件…

责任链设计模式知多少

目录 目标 概述 实现 单向设计模式 双向设计模式 目标 熟悉责任链设计模式&#xff0c;了解责任链设计模式的使用场景、具体实现&#xff0c;单链责任链设计模式和双链责任链设计模式的区别。 概述 一、行为设计模式 行为设计模式是设计模式的一种类型。该类型的设计模…

three.js车辆可视化教程-完整0到1

概述 如有不明白的可以加QQ&#xff1a;2354528292&#xff1b;wx: aichitudousien 更多教学视频请访问&#xff1a;https://space.bilibili.com/236087412 详细教学请到上方视频链接访问&#xff0c;总共3个多小时的教学~ Three.js车展系统 搭建开发环境 使用的开发框架是vu…