栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

SpringBoot+MongoDB GridFS文件上传、下载、预览实战

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

SpringBoot+MongoDB GridFS文件上传、下载、预览实战

SpringBoot + MongoDB GridFS

随着web 3.0的兴起,数据的形式不局限于文字,还有语音、视频、图片等。高效存储与检索二进制数据也成为web 3.0必须要考虑的问题。然而这种二进制数据是不适合存储在普通关系型数据库(MySQL、Oracle)中的,关系型数据库更多的是存储图片的访问路径。因此二进制数据可以使用MongoDB的内置模块GridFS进行检索与存储,也是一种比较好的解决方案。

1、MongoDB GridFS 1.1、GridFS概述

Grid中文释义为网格,FS(File System)释义为文件系统,合起来就是网格式的文件存储规范或系统。GridFS是MongoDB的一个子模块,用于存储和检索超过16M(BSON)的文件,如果文件大小没有超过16M可以将数据保存常规的BSON中。

在实际系统开发中,上传的图片或者文件可能尺寸会很大,此时我们可以借用 GridFS 来辅助管理这些文件。注意:GridFS不是MongoDB自身特性,只是一种将大型文件存储在 MongoDB 的文件规范。这种规范也不是将一个大文件存储在一条文档中,而是自动将文件分成块,每一块作为一条文档单独存储(GridFS使用的块容量默认是256k)。

1.2、GridFS存储原理

GridFS使用两个集合(collection)存储文件:

  1. chunks:用于存储文件内容的二进制数据
  2. files:用于存储文件的元数据(meta数据包括filename、content_type、用户自定义属性等)

GridFS会将两个集合放在一个普通的buket中,并且这两个集合使用buket的名字作为前缀。MongoDB的GridFS默认使用fs命名的buket存放两个文件集合。因此存储文件的两个集合分别会命名为集合fs.files和集合fs.chunks。

当然也可以自定义不同的buket名字,可以在一个数据库中定义多个bukets,但所有的集合的名字都不得超过MongoDB命名空间的限制(MongoDB 集合的命名包括了数据库名字与集合名字,会将数据库名与集合名通过"."分隔。而且命名的最大长度不得超过120bytes)。

使用GridFS存储文件时,如果文件大于 256K ,会先将文件分割成多个块,最终将 chunk 块的信息存储在fs.chunks集合的多个文档中。然后将文件信息存储在fs.files集合的唯一一份文档中。对于同一个大文件,fs.chunks集合中多个文档中的file_id字段对应fs.files集中某一个文档的_id字段。

除此之外files集合中的文档就是BSON格式存储的,可以使用MongoDB的索引的一系列特性,因此可以更快的遍历与操作文件。

1.3、GridFS应用场景

1、应用系统有需要上传图片(用户上传或者系统本身的文件发布等)

2、文件分布式存储与读取(与其他分布式文件存储系统没啥区别)

3、文件的量级处于飞速增长,有可能达到操作系统自己的文件系统的查询性能瓶颈(甚至超过系统硬盘的扩容范围)

4、文件的备份(不使用GridFS这种方式也可以做,但是更加方面)

5、文件系统访问的故障转移和修复(GridFS可以避免用于存储用户上传内容的文件系统出现的某些问题)

6、文件检索支持索引检索,存储除文件本身以外还需要关联更多的元数据信息(文件的发布式作者、发布时间、文件tag属性等等自定义信息),有了索引后可以更快的检索出文件元数据和文件本身。

7、对文件的分类模糊(文件夹分类关系混乱或者无法分类)

8、文件尺寸较小,而且众多,且文件经常有可能被迁移、删除、修改元数据等

2、文件上传、下载、预览功能实现 2.1、在SpringBoot中集成MongoDB

具体集成细节就不重复说了,请参照这篇文章:

文章地址:https://blog.csdn.net/m0_46357847/article/details/123803461

2.2、文件上传功能 END
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/953232.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号