SpringBoot上传图片以Blob格式存储在Mysql

本文记录了在SpringBoot项目中实现图片以Blob格式存储到Mysql数据库的过程,涉及Mysql的Blob类型选择、SpringBoot配置、实体结构设计、图片存储与读取方法,以及遇到的问题和解决方案,特别提醒了图片数据存储为Base64编码后的格式,需要解码后才能正常显示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

最近需要用到上传图标的功能,由于数据量较小,所以直接存储在数据库中,踩了很多坑,以此记录一下

说明

我用的是MariaDB数据库,版本是10.4.0,和Mysql是一样的,下面以kotlin来举例说明,其他语言可对照参考

Mysql的Blob类型

MySQL有四种BLOB类型:
  ·tinyblob:仅255个字符
  ·blob:最大限制到65K字节
  ·mediumblob:限制到16M字节
  ·longblob:可达4GB

SpringBoot的配置

#配置文件传输
spring:
  servlet:
    multipart:
      enabled: true
      #单个文件的大小
      max-file-size: 20MB
	  #总数据的大小
      max-request-size: 20MB

实体结构

@Table(name = "picture")
open class Picture: Serializable {
   

    private val serialVersionUID = 1L
    /** id */
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id")
    var id: Int? = null
    
    @JSONField(name = 
Spring Boot项目中实现图片上传并将其存储到数据库,通常会经历以下几个步骤: 1. **添加依赖**: - 添加Spring Web MVC依赖,用于处理HTTP请求。 - 使用Spring Data JPA或MyBatis等持久层框架,配合MySQL、Oracle等数据库支持。 - 如果选择直接存储二进制数据到数据库,可能需要使用`Lob`(Large Object)功能或者`Blob`或`Binary Large Object`字段。 2. **配置文件**: - 配置文件中指定图片上传的临时目录和最终存储路径。 ```properties spring.servlet.multipart.location=classpath:/uploads/ ``` 3. **创建模型类**(通常是Repository和Entity): - `User.java` 或 `Profile.java` 类中包含一个字段来存放图片路径。 ```java @Entity public class Profile { private String userId; private byte[] profileImage; // getter and setter methods } ``` 4. **上传处理器**(Controller或Service): - 创建一个上传处理方法,使用MultipartFile对象接收上传图片,然后将其内容保存到磁盘。 ```java @PostMapping("/upload-image") public ResponseEntity<String> uploadImage(@RequestParam("file") MultipartFile file) { try { String fileName = UUID.randomUUID().toString() + "." + file.getOriginalFilename(); file.transferTo(new File("/path/to/uploads/" + fileName)); // 将文件名存入数据库对应字段 profileRepository.save(profile); } catch (Exception e) { return new ResponseEntity<>("Error uploading image", HttpStatus.BAD_REQUEST); } return ResponseEntity.ok("Image uploaded successfully"); } ``` 5. **数据库操作**: - 使用JpaRepository或自定义DAO将图片路径插入到对应的表中。 6. **安全性考虑**: - 要限制上传文件大小、类型,并防止恶意文件上传。 **相关问题--:** 1. Spring Boot如何处理大文件上传? 2. 怎样从数据库检索已上传图片? 3. 使用数据库存储图片有哪些潜在问题需要注意?
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值