MongoDB GridFS

GridFS 用于存储和恢复那些超过16M(BSON文件限制)的文件(如:图片、音频、视频等)。

GridFS 也是文件存储的一种方式,但是它是存储在MonoDB的集合中。

GridFS 可以更好的存储大于16M的文件。

GridFS 会将大文件对象分割成多个小的chunk(文件片段),一般为256k/个,每个chunk将作为MongoDB的一个文档(document)被存储在chunks集合中。

GridFS 用两个集合来存储一个文件:fs.files与fs.chunks。

每个文件的实际内容被存在chunks(二进制数据)中,和文件有关的meta数据(filename,content_type,还有用户自定义的属性)将会被存在files集合中。

以下是简单的 fs.files 集合文档:

{"filename": "test.txt", "chunkSize": NumberInt(261120), "uploadDate": ISODate("2014-04-13T11:32:33.557Z"), "md5": "7b762939321e146569b07f72c62cca4f", "length": NumberInt(646) }

以下是简单的 fs.chunks 集合文档:

{"files_id": ObjectId("534a75d19f54bfec8a2fe44b"), "n": NumberInt(0), "data": "Mongo Binary Data" }

GridFS 添加文件

现在我们使用 GridFS 的 put 命令来存储 mp3 文件。 调用 MongoDB 安装目录下bin的 mongofiles.exe工具。

打开命令提示符,进入到MongoDB的安装目录的bin目录中,找到mongofiles.exe,并输入下面的代码:

>mongofiles.exe -d gridfs put song.mp3

GridFS 是存储文件的数据名称。如果不存在该数据库,MongoDB会自动创建。Song.mp3 是音频文件名。

使用以下命令来查看数据库中文件的文档:

>db.fs.files.find()

以上命令执行后返回以下文档数据:

{_id: ObjectId('534a811bf8b4aa4d33fdf94d'), filename: "song.mp3", chunkSize: 261120, uploadDate: new Date(1397391643474), md5: "e4f53379c909f7bed2e9d631e15c1c41", length: 10401959 }

我们可以看到 fs.chunks 集合中所有的区块,以下我们得到了文件的 _id 值,我们可以根据这个 _id 获取区块(chunk)的数据:

>db.fs.chunks.find({files_id:ObjectId('534a811bf8b4aa4d33fdf94d')})

以上实例中,查询返回了 40 个文档的数据,意味着mp3文件被存储在40个区块中。

转载于:https://www.cnblogs.com/bonelee/p/6282194.html

MongoDB GridFS——本质上是将一个文件分割为大小为256KB的chunks 每个chunk里会放md5标识 取文件的时候会将这些chunks合并为一个整体返回...相关推荐

  1. np.eye()的函数能将一个label数组,大小为(1,m)或者(m,1)的数组,转化成one-hot数组

    np.eye()的函数,这个函数的用法非常的简单,但是在预制的代码中,这个函数的用法并非单单制造一个对角矩阵,而是通过其来将一个label数组,大小为(1,m)或者(m,1)的数组,转化成one-ho ...

  2. oracle app文件夹越来越大,还在用手机管家清理内存?删除这几个文件夹,手机瞬间多出10G...

    很多人买手机时都觉得自己内存不够用,所以在买手机时都会选择较大的内存.但是竟然还是不够!其实单纯用手机管家清理手机内存,只是一个治标不治本的过程,但是翻翻手机文件夹,大多数都是英文的,又不敢随便删除! ...

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

    SpringBoot + MongoDB GridFS 随着web 3.0的兴起,数据的形式不局限于文字,还有语音.视频.图片等.高效存储与检索二进制数据也成为web 3.0必须要考虑的问题.然而这种 ...

  4. android 大图 分块,android 大文件分割上传(分块上传)

    由于android自身的原因,对大文件(如视频文件)的操作很容易造成OOM,即:Dalvik堆内存溢出,利用文件分割将大文件分割为小文件可以解决问题. 文件分割后分多次请求服务. //文件分割上传 p ...

  5. android培训之android下大文件分割上传(摘自达内总部)

    由于android自身的原因,对大文件(如影视频文件)的*作很容易造成OOM,即:Dalvik堆内存溢出,利用文件分割将大文件分割为小文件可以解决问题. 文件分割后分多次请求服务.  1 //文件分割 ...

  6. 如何将一个文件分割成多个小文件

    你也许会遇到到这样一个问题?当你有一个较大的软件,而无法用一张软盘将其全部拷下时,你也许会想 到该将它分解开,分盘拷回去后,再将它们合并起来.现在的这种分割工具很多,你想自己动手做一个适合自己的分割工 ...

  7. c语言文件分割与合并程序详解,如何实现将一个文件分割成多个小文件

    你也许会遇到到这样一个问题?当你有一个较大的软件,而无法用一张软盘将其全部拷下时,你也许会想到该将它分解开,分盘拷回去后,再将它们合并起来.现在的这种分割工具很多,你想自己动手做一个适合自己的分割工具 ...

  8. MongoDB GridFS 存储原理

    https://blog.csdn.net/jiangtianjiao/article/details/89349154 http://rdc.hundsun.com/portal/article/7 ...

  9. JAVA写的文件分割与文件合并程序

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 原来觉得 ...

最新文章

  1. 全球增长最快域名解析商Top10:DNSPod新网上榜
  2. 再一贴[亲爱的,我不小心怀孕了~!]
  3. CentOS经常使用文件操作命令[百度博客搬家]
  4. 最小生成树计数(HYSBZ-1016)(加强版实现)
  5. Java中sleep()与wait()的区别
  6. mfsmatelogger安装脚本
  7. Exchange 2016 之分层通讯簿
  8. 如何才能让项目团队高效稳定?
  9. 1.XML的基础和DOCTYPE字段的解析 DTD——文档类型定义(Document Type Definition)/ 由于XML可以自定义标签,那么自然各人编写的标签不一样,这样同步数据便成了问
  10. C语言-学生管理系统
  11. python excel图表 导出word模板_使用python将Excel数据填充Word模板并生成Word
  12. 拟合美国人口matlab编码,美国人口数据的阻滞增长模型拟合分析
  13. xampp套件使用php,php集成套件服务器xampp安装使用教程(适合第一次玩PHP的新手),xampp安装使用...
  14. Echart甘特图实现效果 + 配带抽成方法 + 源码
  15. python数据分析练手小项目-汽车销售偷漏纳税人识别
  16. 详解物理学四大神兽————芝诺的乌龟
  17. excel熵值法计算权重_一文讲清楚分散投资(下)——让很多人顿悟的“熵增定律”在投资中的应用...
  18. Ubuntu 18.04 LTS 桌面版 WPS 安装字体
  19. 联想G40-70旧物改造小总结——替换固态硬盘电池光驱啥的
  20. python 使用摄像头监测心率

热门文章

  1. Python金融大数据分析——第四章数据类型和结构
  2. java2实用教程_Java2实用教程(第5版)重要点及遗漏点(二)
  3. c语言航班订票管理系统源代码,简易C语言航空订票系统
  4. windows下python使用fllow扩展持续读取文件的bug
  5. linux执行命令时报错:permission denied
  6. 你花了多久弄明白架构设计?kafka日志清理
  7. Tensorflow【实战Google深度学习框架】—TensorBoard
  8. h5 数字变化_前端/h5 D3.js实现根据数据动态更新图形/类似进度实时变化效果
  9. PHP从入门到跑路(二),基础语法,数据库操作
  10. html单选框背景图片,如何更改radio、checkbox选项框背景图?