你知道什么是.MongoDB GridFS吗? 知道怎么用吗?

小咪咪 2023-02-25 02:05 110阅读 0赞

目录

一.MongoDB GridFS

  1. GridFS概述

(1)什么是GridFS

(2) 工作原理

2.​​​​​​​ GridFS保存文件

2.​​​​​​​ GridFS读取文件(查询)

3.查询所有

4.​​​​​​​GridFS下载


一.MongoDB GridFS

首先,话不多说,直接先来个依赖和配置文件让你更方便操作:

  • pom.xml




    org.springframework.boot
    spring-boot-starter-test



    org.springframework.boot
    spring-boot-starter-data-mongodb


    org.projectlombok
    lombok


    commons-io
    commons-io

  • application.yml

    spring:
    data:

    1. mongodb:
    2. uri: mongodb://root:root@localhost:27017/demo

1. GridFS概述

(1)什么是GridFS

mongoDB用于存储文件技术。

GridFS是MongoDB提供的用于持久化存储文件的模块,CMS使用MongoDB存储文件,使用GridFS可以快速集成开发。

GridFS自动创建2个集合(表)

20200709225538577.png

(2)​​​​​​​ 工作原理

在GridFS存储文件是将文件分块存储,文件会按照256KB的大小分割成多个块进行存储,GridFS使用两个集合(collection)存储文件:

  1. 一个集合是chunks, 用于存储文件的二进制数据;
  2. 一个集合是files,用于存储文件的元数据信息(文件名称、块大小、上传时间等信息)。

从GridFS中读取文件要对文件的各各块进行组装、合并。

2.​​​​​​​ GridFS保存文件

使用GridFsTemplate存储文件

这里创建测试类来测试使用:

注意:路径中文件要真实存在(可任意有无数据)

  1. @RunWith(SpringRunner.class)
  2. @SpringBootTest(classes = MgTestApplication.class)
  3. public class TestGridFS {
  4. @Resource
  5. private GridFsTemplate gridFsTemplate;
  6. @Test
  7. public void testStore() throws FileNotFoundException {
  8. // 1.获得文件流
  9. // 1.1.文件
  10. File file = new File("E:\\file\\index.html");
  11. // 1.2.流
  12. FileInputStream is = new FileInputStream(file);
  13. // 2.存储 .store(内容,名称,类型)
  14. ObjectId id = gridFsTemplate.store(is, "测试页面名称", "");
  15. System.out.println(id);
  16. }
  17. }

2.​​​​​​​ GridFS读取文件(查询)

  1. /**
  2. * 查询
  3. */
  4. @Test
  5. public void testFind(){
  6. // 条件查询
  7. // 1.条件
  8. Query query = Query.query(Criteria.where("_id").is("5f053f2959d4df55b02e3565"));
  9. // 2.查询
  10. GridFSFile gridFSFile = gridFsTemplate.find(query).first();
  11. // 3.处理结果
  12. System.out.println(gridFSFile.getFilename());
  13. }

3.查询所有

  1. @Test
  2. public void testFindAll() {
  3. // 查询所有
  4. GridFsResource[] resources = gridFsTemplate.getResources("*");
  5. for (GridFsResource gfr : resources) {
  6. System.out.println(gfr.getFilename());
  7. }
  8. }

4.​​​​​​​GridFS下载

  1. @Test
  2. public void testDownLoad() throws IOException {
  3. // 下载id为5f053f2959d4df55b02e3565
  4. // 1.获得MongoClient
  5. MongoClientURI clientURI = new MongoClientURI("mongodb://root:root@localhost:27017");
  6. MongoClient mongoClient = new MongoClient(clientURI);
  7. // 2.获得数据库
  8. MongoDatabase database = mongoClient.getDatabase("demo");
  9. // 3.创建模块操作对象
  10. GridFSBucket gridFSBucket = GridFSBuckets.create(database);
  11. // 4.下载
  12. // 4.1.确定下载资源
  13. // 1.条件
  14. Query query = Query.query(Criteria.where("_id").is("5f053f2959d4df55b02e3565"));
  15. // 2.查询
  16. GridFSFile gridFSFile = gridFsTemplate.find(query).first();
  17. // 4.2.具体下载操作
  18. GridFSDownloadStream gridFSDownloadStream = gridFSBucket.openDownloadStream(gridFSFile.getObjectId());
  19. GridFsResource gridFsResource = new GridFsResource(gridFSFile, gridFSDownloadStream);
  20. // 5.获得下载内容
  21. String content = IOUtils.toString(gridFsResource.getInputStream(), "UTF-8");
  22. System.out.println(content);
  23. }

看完恭喜你,又知道了一点点!!!

你知道的越多,不知道的越多!

~感谢志同道合的你阅读, 你的支持是我学习的最大动力 ! **加油 ,陌生人一起努力,共勉!!**

注: 如果本篇有需要改进的地方或错误,欢迎大神们指定一二~~

发表评论

表情:
评论列表 (有 0 条评论,110人围观)

还没有评论,来说两句吧...

相关阅读

    相关 知道什么 BitMap

    BitMap(位图)是一种数据结构,用于表示一个特定范围内的二进制位(0或1)序列。在计算机科学中,BitMap通常用于高效地表示大量的布尔值,每个位代表一个布尔值,可以...

    相关 知道什么?有什么用处?

    堆是一种数据结构,用于存储和组织数据。堆通常用于实现优先队列,其中具有最高(或最低)优先级的元素始终位于堆的顶部。堆分为最大堆和最小堆,最大堆中父节点的值大于或等于其子节...

    相关 知道什么纳米团簇

    是的,我知道什么是纳米团簇。纳米团簇是由数量有限的纳米颗粒组成的小型结构。这些颗粒的大小通常在1到100纳米之间,具有特殊的物理和化学性质。纳米团簇在很多领域,如医学、能源、电

    相关 知道什么语法糖

    在我之前的学习和开发中,是比较少的听说语法糖这个概念的,我第一次是在学习python 时听到的,但是感觉对功能代码的理解没有什么影响就没有再花心思去理解。今天我在看Vue 官方