业务场景:图片在前端上传到服务器进行保存,然后读取到前端进行展示。

实现方式说明:

该业务场景有多种实现方式,我们根据不同的场景选择合适的实现方式。本篇主要介绍的是图片由前端调用接口传递给后端后,由后端直接保存到数据库中保存,读取时后端直接将图片以流的方式返回给前端来实现;

本篇只列举后端代码,保存图片时既保存了原图,也保存了缩略图;

实现步骤:

1、前期准备

1.1 创建可以保存图片的表结构

图片是以blob的类型在数据库进行保存的,考虑到原图有可能会比较大,所以采用了longblob;

特别提醒: 如果图片比较大,则采用longblob方式进行保存;

1.2 在springboot中创建该表的实体类

特别提醒: 保存文件的数据库字段对应的实体类的类型为byte[],不需要特殊转换,mybatis中查询指定到该实体类后就可以直接读取出来;

其他的分成没有特殊的地方,不再赘述;

2、实现图片上传并将图片保存到数据库中

2.1 接口接收并传给实现类处理

接口已MultipartFile接收文件,MultipartFile不光可以接收图片,还可以接收Excel、word等文件,Controller层不对数据进行处理,只做必要的验证和异常信息的拦截;

2.2 实现类处理文件并调用mapper保存

MultipartFile可以直接通过 .getBytes() 获取到byte[] 然后直接调用Mapper通用接口进行保存;缩略图的话,需要导入依赖thumbnailator,Thumbnailator 是一个优秀的图片处理的Google开源Java类库。处理效果远比Java API的好,功能十分强大,可以进行缩略、旋转、按比例缩略、裁剪等操作,最后通过BufferedImage也是保存为byte[] 类型数据进行保存;

进行到这里,图片就可以已blob的类型保存到数据库中了,下边来介绍一下如何通过 从数据库获取图片展示到前端

3、从数据库获取图片数据供前端展示

要实现此功能的话,难点有两处。第一,从数据库中查询出来到变量中,二是以文件流的方式输出到前端,来看看具体实现吧;

3.1 从数据库中查询出来还原到byte[] 中

我实验了好多种方式,都没能实现该效果,最后采用了xml文件中指向实体类的方式,mapper采用实体类接收数据,虽然用起来比较鸡肋,但是没办法,先实现功能吧,欢迎有其他好办法的小伙伴指教;

特别提醒: 虽然采用了实体类接收,但是还是建议用到哪个字段返回哪个字段,不要所有数据都差出来,因为图片还是比较大的,会严重影响使用效率;

3.2 以文件流的方式输出到前端

注意最后关闭流哦!

#@lehao#

帮助到您请点赞关注收藏谢谢!!

需求:业务场景:图片在前端上传到服务器进行保存,然后读取到前端进行展示。实现方式说明:该业务场景有多种实现方式,我们根据不同的场景选择合适的实现方式。本篇主要介绍的是图片由前端调用接口传递给后端后,由后端直接保存到数据库中保存,读取时后端直接将图片以流的方式返回给前端来实现;本篇只列举后端代码,保存图片时既保存了原图,也保存了缩略图;实现步骤:1、前期准备1.1 创建可以保存图片的表结构图片是以blob的类型在数据库进行保存的,考虑到原图有可能会比较大,所以采用了longbl CREATE TABLE `company` ( `id` INT(11) PRIMARY KEY AUTO_INCREMENT, `company_name` VARCHAR(255) DEFAULT NULL COMMENT '企业名称', `business_license_url` VARCHAR(255) DEFAULT NULL COMMENT '营业执照上传url' ) ENGINE=INNODB AUTO_INCREMENT=101 DEFAULT @Entity @Table(name = "article_picture") public class ArticlePictureEntity extends BaseEntity implements Serializable { * 图片 地址 private String url; * 文章...
文章目录前言一、导入jar包及配置二、编写 前端 (testUploadFile.html)三、Controller层(FileUploadController)四、Service层(UserServiceImpl)五、运行Demo后记 上传图片 数据库 有两种方式: 将 图片 保存 的路径存储到 数据库 。 该方式的 数据库 字段是varchar类型的,毕竟存放的是路径嘛 将 图片 以二进制数据流的形式直接写入 数据库 字段中。 这种方式一般不推荐,因为对 数据库 的性能损耗非常严重。 所以本文采用第一种方式:将图
第一步,在webmvcconfig下配置虚拟路径映射,一般来说我们存照片的地址就在主机上创建一个文件夹,也就是file:后边的uploadPathImg,但是我们不能直接访问物理路径的 图片 ,因此我们要配置虚拟路径的映射,前面的/uploadImg/**就是说http://ip地址:+端口号+/uploadImg/**就可以访问到 图片 了,这里我的uploadPathImg通过@value注解去到yml中找到对应的配置属性值,我们通过yml去配置该值后期便于修改 第二步,配置yaml virtual...
springboot -父子工程-初始版(包含CRUD示例接口) jpa-hibernate-dm: 数据库 为{国产达梦 数据库 },持久层技术为jpa-hibernate mybatis -dm: 数据库 为{国产达梦 数据库 },持久层技术为 mybatis mybatis -plus-dm: 数据库 为{国产达梦 数据库 },持久层技术为 mybatis -plus 补充说明{针对国产达梦 数据库 }: 用户名和 数据库 (模式)名一致,可以选择jpa-hibernate-dm 或者 mybatis -plus-dm 用户名和 数据库 (模式)名不一致,可以选择 mybatis -dm
一、基于注解(@Scheduled) 二、基于接口(SchedulingConfigurer) 前者相信大家都很熟悉,但是实际使用中我们往往想从 数据库 中读取指定时间来动态执行定时任务,这时候基于接口的定时任务就派上用场了。 三、基于注解设定多线程定时任务 一、静态:基于注解 基于注解@Scheduled默认为单线程,开启多个任务时,任务的执行时机会受上一...... 项目中需要从两个不同的 数据库 查询数据,之前实现方法是: springboot 配置连接一个数据源,另一个使用jdbc代码连接。 为了改进,现在使用 SpringBoot 配置连接两个数据源 实现效果: 一个 SpringBoot 项目,同时连接两个 数据库 :比如一个是pgsql 数据库 ,一个是oracle 数据库 (啥 数据库 都一样,连接两个同为oracle的 数据库 ,或两个不同的 数据库 ,只需要更改对应的driver-class-name和jdbc-url等即可) 注意:连接什么 数据库 ,要引入对应 数据库 的包
好的,以下是一个简单的Spring Boot应用程序,它可以将笔记存入 数据库 中: 首先,你需要一个Note实体类,它具有id、title和content属性,这些属性都需要在 数据库 中进行存储。例如: ``` java @Entity public class Note { @GeneratedValue(strategy = GenerationType.AUTO) private Long id; @Column(nullable = false) private String title; @Column(nullable = false) private String content; // getters and setters 接下来,你需要一个NoteRepository接口,用于将Note对象存入 数据库 中: ``` java public interface NoteRepository extends JpaRepository<Note, Long> { 现在,你可以通过使用Spring的依赖注入来创建一个NotesService,它使用NoteRepository来将笔记存入 数据库 : ``` java @Service public class NotesService { private final NoteRepository noteRepository; public NotesService(NoteRepository noteRepository) { this.noteRepository = noteRepository; public void save(Note note) { noteRepository.save(note); 最后,你可以在你的控制器中使用这个NotesService来将笔记存入 数据库 中: ``` java @RestController @RequestMapping("/api/notes") public class NotesController { private final NotesService notesService; public NotesController(NotesService notesService) { this.notesService = notesService; @PostMapping("/") public void create(@RequestBody Note note) { notesService.save(note); 现在,当你向`/api/notes/`发送一个POST请求时,它将创建一个新的笔记,并将其存入 数据库 中。 希望这可以帮助你开始编写笔记应用程序!