mysql存储文件

2025-11-23 18:39:11

使用mysql存储文件

在项目开发过程中,遇到了要使用mysql存储文件的问题,鉴于之前总是在数据库中总是保存字段信息,很少保存文件类型的数据。

在mysql中保存文件类型使用的数据类型主要为MediumBlob,其中也有其他类型数据:

①TinyBlob类型 最大能容纳255B的数据

②Blob类型 最大能容纳65KB的

③MediumBlob类型 最大能容纳16MB的数据

④LongBlob类型 最大能容纳4GB的数据

该类型是mysql数据库中的二进制对象,可以保存图像、音乐、文件等资源。

下面结合mybatis-plus进行数据的插入和取出操作,使用SpringBoot测试单元,进行操作测试。

Spring Boot项目搭建以及相关配置均不在赘述,主要是进行操作记录。

pojo层:

@Data//使用lomBok注解

public class DocumentBak {

private String id;

private String title;

private String tagId;

private String fileLocation;

private String status;

private String suggest;

private byte[] file;

}

dao层文件

package com.lisir.task.dao;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;

import com.lisir.task.pojo.DocumentBak;

public interface FileDao extends BaseMapper {

int save(DocumentBak documentBak);

}

测试单元测试:

进行插入测试:

@SpringBootTest

class TaskApplicationTests {

` @Resource

private FileDao fileDao;

@Test

void saveFile(){

DocumentBak documentBak = new DocumentBak();

InputStream file =null;

byte[] finalBytes =null;

try {

file = new FileInputStream("C:\\Users\\lisir\\Desktop\\sql文件\\JAVA程序员工作常用英语(细心整理).doc");

ByteArrayOutputStream outputStream = new ByteArrayOutputStream();

byte[] bytes = new byte[1024];

int temp;

while ((temp = file.read(bytes)) != -1) {

outputStream.write(bytes, 0, temp);

}

finalBytes = outputStream.toByteArray();

} catch (FileNotFoundException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

documentBak.setId(UUID.randomUUID().toString().substring(0,7));

documentBak.setFileLocation("F:\\DTLFolder\\2021\\08\\08");

documentBak.setStatus("0");

documentBak.setSuggest("");

documentBak.setFile(finalBytes);

if (fileDao.insert(documentBak)>0){

System.out.println("插入成功");

}else System.out.println("failed!!");

}

}

tips:在设置文件字段时,将资源文件转换成为byte[],在进行保存

结果:

数据库:

从数据库中取出文件

在同一个单元测试项目中,使用以下操作是;

@Test

void selectFile(){

DocumentBak e = fileDao.selectById("ec66b2e");

byte[] bytes = e.getFile();

String filePath = "C:\\Users\\lisir\\Desktop\\sql文件\\test\\";

File file = new File(filePath+"nice.doc");

try {

FileOutputStream fos = new FileOutputStream(file);

fos.write(bytes,0,bytes.length);

if(file.exists()){

System.out.println("success!!");

}else System.out.println("fail!!");

fos.flush();

fos.close();

} catch (FileNotFoundException ex) {

ex.printStackTrace();

} catch (IOException ex) {

ex.printStackTrace();

}

}

(IOException ex) {

ex.printStackTrace();

}

}

结果:

    苹果7出来后,苹果官网6s会降价吗?大概要价钱呢
    梦幻西游:耗时6个月斥资50万冲刺19级月亮石,开局就暴击

    Copyright © 2022 北智游戏学院 - 活动攻略与新手教学 All Rights Reserved.