当前位置: 首页 > news >正文

读取sqlserver数据库中varbinary(max)类型的内容,并将图片信息显示在前端页面

目录

1.varbinary(max)的说明

2.图片显示

3.总结


1.varbinary(max)的说明

varbinary(max) 是一种SQL Server数据库字段类型,用于存储二进制数据,可以存储最大长度的二进制数据。以下是关于 varbinary(max) 的说明:

  • 存储容量: 可以存储最大长度为 2^31-1 字节(即 2,147,483,647 字节),这使得它非常适合存储大型二进制数据,例如图片、音频或视频文件等。

  • 用途: 主要用于存储不需要字符集或排序规则的二进制数据,通常是不需要进行文本排序或比较的数据。

  • varbinary 的区别: varbinary(max) 可以存储超过 8,000 字节的数据,而 varbinary 有大小限制,最大长度为 8,000 字节。

  • 数据处理: 在数据库中存储的二进制数据可以是任何类型的文件或数据流,通过数据库管理系统可以进行存储、检索和管理。

总结而言,varbinary(max) 是SQL Server中用于存储大型二进制数据的灵活且高容量的字段类型,适合于需要存储大型文件或二进制数据流的场景。

2.图片显示

①使用mybatis查询二进制数据

Object selImageInfo(@Param("docId") Integer docId, @Param("id") Integer id, @Param("docType") DocTypeEntity docType, @Param("dbName") String dataIndex);
    <select id="selImageInfo" resultType="java.lang.Object">SELECTFile_Images.fi_ImageFROM ${docType.tableName},File_ImagesWHERE ${docType.tableName}.${docType.uniqueKey} = #{id}and doc_id = #{docId}and ${docType.tableName}.${dbName} = File_Images.fi_Id</select>

查询结果返回Object类型,网上有说使用byte[]作为返回值,我使用的时候报错:

[B cannot be cast to [Ljava.lang.Object;"表示尝试将一个字节数组(字节数组在Java中表示为byte[])转换成Object数组,但这是不兼容的转换。

②将字节数组转换为base64格式的字符串

Object image = mapper.selImageInfo(docId, id, docType, column.getDataIndex());String base64Encoded = Base64.getEncoder().encodeToString((byte[])image);// ByteArrayInputStream bis = new ByteArrayInputStream((byte[])image);// BufferedImage imageInfo = ImageIO.read(bis);//// // 缩放比例为0.5// double scale = 0.5;//// int targetWidth = (int) (imageInfo.getWidth() * scale);// int targetHeight = (int) (imageInfo.getHeight() * scale);//// BufferedImage resizedImage = new BufferedImage(targetWidth, targetHeight, imageInfo.getType());// Image img = imageInfo.getScaledInstance(targetWidth, targetHeight, Image.SCALE_SMOOTH);// resizedImage.createGraphics().drawImage(img, 0, 0, null);//// // 将图片转换为Base64// ByteArrayOutputStream baos = new ByteArrayOutputStream();// ImageIO.write(resizedImage, "jpg", baos);// byte[] imageBytes = baos.toByteArray();// String base64String = Base64.getEncoder().encodeToString(imageBytes);

将sql返回object变量强转为byte数组,然后转换为base64格式的字符串。

后面注释的代码的进行图片的缩放处理,也可以在前端控制图片的显示大小。

③显示图片

html

    <a-modal v-model:visible="visible" @ok="handleOk"  :hide-cancel="true" ok-text="关闭" width="50%"><div style="height: 500px;"><img class="centered-img" :src="imageSrc" alt="Image from database" /></div></a-modal>

js

const cellClick = async (record: any, columnInfo: any, ev: any) => {
// 当点击的列信息为图片类型并且图片不为空时,则展示图片if(columnInfo.colType == 16 && record[columnInfo.dataIndex]){// 查询图片信息const reqBody = {docId:prop.docId,id:record.id,column:columnInfo}const res = await getImage(reqBody)imageSrc.value = 'data:image/jpg;base64,' +  resvisible.value = true}
}

css

.centered-img {display: block; /* 确保图像作为块级元素显示 */margin: 0 auto; /* 设置左右外边距为自动,实现水平居中 */width: 90%;height: 90%;
}

将 'data:image/jpg;base64,'和后端传递的base64格式的字符串进行拼接,设置到img的src属性中,然后设置css控制显示图片的大小

3.总结

imageIO的使用

Java ImageIO 类详解-CSDN博客

http://www.lryc.cn/news/401346.html

相关文章:

  • orcad导出pdf 缺少title block
  • XML 验证器:确保数据完整性和准确性的关键工具
  • opencv学习:图像视频的读取截取部分图像数据颜色通道提取合并颜色通道边界填充数值计算图像融合
  • 数据结构——单链表详解(超详细)(2)
  • 类和对象(2
  • AcWing 668. 游戏时间2
  • AI发展下的伦理挑战,应当如何应对?
  • Java面试题--JVM大厂篇之深入解析JVM中的Serial GC:工作原理与代际区别
  • 网络安全高级工具软件100套
  • Ubuntu 添加gcc头文件搜索路径
  • c++写数据结构进入文件
  • Java实验4
  • 优化 Java 数据结构选择与使用,提升程序性能与可维护性
  • 华为USG6000V防火墙安全策略用户认证
  • Windows 应急响应手册v1.2 -百度网盘下载
  • Billu_b0x靶机
  • GitHub+Picgo图片上传
  • springboot的事务管理
  • 深入解析rsync:定义、架构、原理、应用场景及实战指南
  • discuz手机版发帖提示“网络出现问题,请稍后再试”
  • 图片如何去水印,PS 图片去水印的几种常见方法
  • 【从零开始实现stm32无刷电机FOC】【实践】【5/6 stm32 adc外设的高级用法】
  • 2407-mysql笔记
  • 如何解决隐藏游戏服务器的源IP问题
  • 云计算数据中心(一)
  • libwebrtc.a+exosip连接fS 环境部署tips
  • 第二证券:市场估值依然处于较低区域 适合中长期布局
  • 开始Linux之路
  • leetcode-三数之和
  • opencv—常用函数学习_“干货“_总