使用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<DocumentBak> {
    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();
        }

    }

结果:
查询结果

在这里插入图片描述

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐