MongoDB_GridFS_存储文件

GridFS

mongoDB除了保存各种文档(JOSN结构)外还能够保存文件。GridFS规范提供了一种透明机制,可以将一个大文件分割成为多个较小的文档,这样的机制允许我们有效的保存大文件对象,特别对于那些巨大的文件,比如视频、高清图片等。

GridFS使用两个表来存储数据:

  • files:包含元数据对象

文件的元数据放在这个集合里面,默认fs.files。这个里面的每个文档表示GridFS中的一个文件,与文件相关的自定义元数据也保存在其中,除了用户自定义的键,GridFS还有默认的一些键:

  1. _id:文件唯一的id,在块中为“files_id”键的值存储
  2. length:文件内容总的字节数
  3. chunksize:每块的大小,以字节为单位。默认25K,可以调整
  4. uploadDate:文件存入的时间
  5. md5:文件内容的md5校验,由服务端生成
  • chunks:包含其他一些相关信息的二进制块

GridFS的块有个单独的集合。默认情况下,块将使用fs.chunks集合,如果有需要可以覆盖。这个块集合里面文档的结构非常简单:

1 {
2 "_id":ObjectId("......"),
3 "n":0,
4 "data":BinData("......"),
5 "files_id":ObjectId(".......")
6 }  
  1. _id:标志唯一
  2. n:表示块的编号,也就是这个块在原文件中的顺序号
  3. data:包含组成文件块的二进制数据
  4. files_id: 包含这个块元数据的文件文档的"_id"

使用mongofile来操作GridFS:

 1   //将 “aaaa” 写入foo.txt文件中
 2  c:\MongoDB\mongodb_win32_x86_64_2.2.7\bin>echo "aaaa" > foo.txt
 3  //将foo.txt保存到GridFS中
 4  c:\MongoDB\mongodb_win32_x86_64_2.2.7\bin>mongofiles.exe put foo.txt
 5  connected to: 127.0.0.1
 6  added file: { _id: ObjectId(‘53449f0becdebde54ff76105‘), filename: "foo.txt", ch
 7  unkSize: 262144, uploadDate: new Date(1397006091696), md5: "819596956779801cced4
 8  fb21379bf023", length: 9 }
 9  done!
10 //查看
11 c:\MongoDB\mongodb_win32_x86_64_2.2.7\bin>mongofiles.exe list
12 connected to: 127.0.0.1
13 foo.txt 9
14 //获取
15 c:\MongoDB\mongodb_win32_x86_64_2.2.7\bin>mongofiles.exe get foo.txt
16  connected to: 127.0.0.1
17  done write to: foo.txt  

命令说明

put:将文件系统中的一个文件添加到GridFS

list:会把所有添加到GridFS中的文件列出来

get:put的反向操作

在mongodb工具中查看GridFS

时间: 2024-10-01 05:05:13

MongoDB_GridFS_存储文件的相关文章

实验:Oracle直接拷贝物理存储文件迁移

实验目的:Oracle直接拷贝物理文件迁移,生产库有类似施工需求,故在实验环境简单验证一下. 实验环境: A主机:192.168.1.200 Solaris10 + Oracle 11.2.0.1 B主机:192.168.1.186 Solaris10 1.备份ORACLE安装包($ORACLE_BASE目录) tar cvf oracle.tar oracle 2.关库,备份参数文件,控制文件,数据文件,临时文件,日志文件 查看各个文件的存放路径: SQL> show parameter pf

【转】PHP操作MongoDB GridFS 存储文件

PHP操作MongoDB GridFS 存储文件,如图片文件 GridFS是MongoDB的一个内置功能,它提供一组文件操作的API以利用MongoDB存储文件,GridFS的基本原理是将文件保存在两个Collection中,一个保存文件索引,一个保存文件内容,文件内容按一定大小分成若干块,每一块存在一个Document中,这种方法不仅提供了文件存储,还提供了对文件相关的一些附加属性(比如MD5值,文件名等等)的存储.

Android 存储文件方式之一---SharedPreferences 内容提供者,以xml 的方式进行数据 存储。是一种轻量级的文件数据存储

? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 //UI界面的布局 文件<br><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"     xmlns:tools="http://schemas.android.com/tools"

如何在Linux中加密云存储文件和文件夹?

我们大多数人使用Dropbox.Gdrive或Copy之类的云存储服务,能够随时随地从我们的任何设备使用那些同步的文件.但是没人会放心地将自己的敏感数据放到云存储平台上.而最近的黑客事件表明了我们的数据有多么不安全.2014年,许多名人照片从云存储平台泄露出去,发布到社交网络网站上.那么,何不先加密数据,然后再上传到云存储平台,以加强安全呢? 何谓加密? 如果你用谷歌搜索一下"What is Encryption?",就会搜到这一解释: "数据加密是确保数据安全的最有效方法.

指定存储文件的编码格式(上)

终于搞完了,内容稍微有点多分为两篇把. <指定存储文件的编码格式(上)> <指定存储文件的编码格式(下)> 本篇为上篇. 主流的文件编码包括:UTF8\UTF8-WITHOUT-BOM\UTF16LE\UTF16BE\ANSI等. 中文的windows操作系统默认使用就是ANSI编码. 各种编码的主要规则大家可以去wiki网站.unicode.org网站等查看. 本文的上篇和下篇都采用windows函数WideCharToMultiByte和MultiByteToWideChar为

磁盘存储文件图解

目录读取过程 /var/log/aa.log 1.先找到跟目录的(系统加载的时候以确定),找到根目录中文件名var对应的inode 2.再到Inode区找到var目录对应的block的inode,并在存储区找到相应的block. 3.在var所在block中找到文件名为log的对应的inode 4.到Inode区找到log对应的block的inode,并在存储区找到相应的block. 5.在log所在block中找到文件名为aa.log的对应的inode 6.到Inode区找到aa.log对应的

DLNA架构在机顶盒上播放云存储文件的实现

DLNA 架构在机顶盒上播放云存储文件的实现   摘要: 随着越来越多的数码设备,音像设备等对 UPNP 协议的支持和普及,业界对多媒体内容提供服务的需求越越来越强烈,为了实现遵循 UPNP 协议和 DLNA 架构来对多媒体内容提供服务,多媒体服务器 DMS 就成了唯一能够担当该需求的设备.本文着重介绍如何基于 DLNA 架构,来实现云端媒体文件在机顶盒上的播放. 关键词: DLNA , UPNP , DMS ,云存储, fuse 1 . DLNA 简介 数字生活网路联盟 Digital Liv

Android学习笔记(4)——登陆界面模拟及存储文件到内存

搬运自本人博客:xge技术博客 原文:http://www.xgezhang.com/android_login_save_file.html 在本机或服务器上保存文件是比较简单的一件事,那么在安卓系统下我们该如何存储文件呢?这里我们借用登陆界面常见的"记住登陆用户名密码"的为例,来介绍一下如何把文件保存到手机内存,也综合复习和练习一下之前的内容: 首先我们还是先做界面: 对应的xml布局文件如下,采用的是线性布局加上相对布局来实现的: ? 1 2 3 4 5 6 7 8 9 10 1

课堂整理:写入和读取外部存储文件

layout代码: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_pare