GridFS 介绍

GridFS是MongoDB规范用于存储和检索大文件,如图片,音频文件,视频文件等。这是一种文件系统用来存储文件,但数据存储于MongoDB集合中。GridFS存储文件比其文档大小16MB限制的更大能力。

GridFS的划分一个文件分成块存储数据每个块在一个单独的文件,每个最大尺寸255K。

GridFS默认使用两个集合 fs.files 和 fs.chunks 存储该文件的元数据和块。每组块标识其唯一的_id ObjectID字段。fs.files切断作为父文件。 fs.chunks 文档 files_id 字段链接块到其父文件。

以下是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:newDate(1397391643474),md5:"e4f53379c909f7bed2e9d631e15c1c41",length:10401959}

我们也可以看到在fs.chunks集合涉及使用下面的代码保存的文件都存在于块中,使用以前的查询返回文档ID:

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

在我的示例中,该查询返回40个文档,是整个MP3文件划分成的40块数据。

前言

GridFS是一种将大型文件存储在MongoDB的文件规范:

数据库支持以BSON格式保存二进制对象。 但是MongoDB中BSON对象最大不能超过4MB。

GridFS 规范提供了一种透明的机制,可以将一个大文件分割成为多个较小的文档。

为实现这点,该规范指定了一个将文件分块的标准。每个文件都将在文件集合对象中保存一个元数据对象,一个或多个块对象可被组合保存在一个块集合中。

上传文件

Shell

mongofiles put xxx.txt

常用参数如下:

-d 指定数据库

-u –p 指定用户名,密码

-h 指定主机

-port 指定主机端口

-r 如果存在同名文件则在put成功后删除其他同名文件

通过这样的命令就可以把文件上传到fs集合中。

Java

//获取db

MongoClient mClient = new MongoClient("10.211.55.8");

db = mClient.getDB("test");

//得到Gridfs对象

GridFS fs = new GridFS(db);

//访问要上传的文件

File file = new File("/Users/luoaz/05testDir/files/test1.txt");

//执行保持

GridFSInputFile gfFile = fs.createFile(file);

gfFile.save();

下载文件

Shell

mongofiles get xxx.txt

常用参数如下:

-d 指定数据库

-u –p 指定用户名,密码

-h 指定主机

-port 指定主机端口

-l 下载到本地的文件名,默认和数据库中的名字一致

通过这样的命令就可以把文件从fs集合中下载到本地。

Java

Java 下载的重点是怎么获取到文件流,获取到文件流后就跟普通的保持文件到本地一样了。

//获取db

MongoClient mClient = new MongoClient("10.211.55.8");

db = mClient.getDB("test");

//得到Gridfs对象

GridFS fs = new GridFS(db);

//要下载到的文件路径

File file = new File("/Users/files/down_test1.txt");

FileOutputStream os = new FileOutputStream(file);

//获得文件流

InputStream is = fs.findOne(new BasicDBObject("filename","test1.txt")).getInputStream();

//下载

byte[] bytes = new byte[1024];

while(is.read(bytes)>0){

os.write(bytes);

}

os.flush();

os.close();

删除文件

Shell

mongofiles delete xxx.txt

删除指定名称的文件,如果存在同名文件则都删除

常用参数如下:

-d 指定数据库

-u –p 指定用户名,密码

-h 指定主机

-port 指定主机端口

Java

//获取db

MongoClient mClient = new MongoClient("10.211.55.8");

db = mClient.getDB("test");

//得到Gridfs对象

GridFS fs = new GridFS(db);

//删除指定文件名称的文件

fs.remove("test1.txt");

查看文件

Shell

1、list

显示所有文件

mongofiles list xx.txt

显示所有的指定文件名的文件

2、search

搜索指定名称的文件,可以模糊搜索

mongofiles list xx.txt

mongofiles list .txt

Java

这个就跟MongoDB的find用法一样了

/*//保存文件

GridFSFile file = myFS.createFile(new File("D:/aa.png"));

file.save(); */

//输出文件

GridFSDBFile file1 =myFS.findOne("aa.png");

file1.writeTo(new File("D:/image1.png"));

//删除文件

/*GridFSDBFile file =myFS.findOne("image1.jpg");

myFS.remove((ObjectId) file2.getId());*/

mongodb gridfs java_mongodb Gridfs操作相关推荐

  1. mongodb gridfs java_mongodb gridfs基本使用

    Mongodb GridFS图片文件存储解决方案 之前解决方案是接收图片数据后,将图片直接存储到盘阵,然后通过Apache做服务器,将图片信息存储到数据库,并且存储一个Apache的访问路径. 目前需 ...

  2. mongodb gridfs java_MongoDB基于GridFS管理文件

    前言 GridFS是一种将大型文件存储在MongoDB的文件规范: 数据库支持以BSON格式保存二进制对象. 但是MongoDB中BSON对象最大不能超过4MB. GridFS 规范提供了一种透明的机 ...

  3. mongodb gridfs php,PHP操作MongoDB GridFS 存储文件的详解

    //初始化gridfs $conn = new Mongo(); //连接MongoDB $db = $conn->photos; //选择数据库 $grid = $db->getGrid ...

  4. MongoDB存储文件之GridFS

    [MongoDB是什么?] MongoDB是一个基于分布式文件存储的数据库.由C++语言编写.旨在为WEB应用提供可扩展的高性能数据存储解决方案. MongoDB是一个介于关系数据库和非关系数据库之间 ...

  5. MongoDB中的GridFs是什么

    本文来介绍下MongoDB的GridFsTemplate如何使用 文章目录 什么是GridFS 为什么要使用GridFS GridFS的两个集合 本文小结 什么是GridFS GridFS是一种将大型 ...

  6. python gridfs_【已解决】用Python去连接本地mongoDB去用GridFS保存文件

    折腾: 期间,命令行方式的mongofiles去put get delete delete_id等,已经基本上搞清楚了. 接着就是去用Python代码,通过driver: 的方式,调用API,去保存数 ...

  7. python gridfs_python利用mongodb上传图片数据 : GridFS 与 bson两种方式

    利用mongodb保存图片通常有两种方法,一种是将图片数据转化为二进制作为字典的键值对进行保存,另一种是利用mongodb提供的GridFS进行保存,两者各有利弊.性能方面的优劣未曾测试,无法进行评价 ...

  8. 用python向mongodb插入数据_Python操作MongoDB数据库(一)

    Python操作MongoDB数据库(一) 前言 干货文章继续出发!隔的时间有些久了哈,对 MongoDB 安装回顾的同学,可以看下windows环境 <初识 MongoDB 数据库>.这 ...

  9. MongoDB搭建和简单操作(windows环境)

    昨天看到fish的MongoDB,但遇到不少问题,于是自己一步一步尝试,将遇到之问题和解决方法记录总结 首先感谢fish!昨天忘了放链接:http://www.cnblogs.com/fish-li/ ...

最新文章

  1. XML解析之dom4j
  2. 将js文件打包进dll 方法3
  3. Java基础知识——Java数组详解
  4. python 文本处理库_实用又好用,6 款 Python 特殊文本格式处理库推荐
  5. php过滤多空格_php如何去除多余空格
  6. 汽车故障检测仪计算机教程,道通MS诊断仪在线编程刷隐藏908SPRO汽车故障检测电脑...
  7. 计算机信息中心的安全生产责任,信息中心安全生产责任制 (刘.doc
  8. DHT11温湿度传感器(zigbee)
  9. Word 论文排版操作顺序
  10. 初等变换:矩阵与行列式
  11. 共读四步法:看见正向核心的力量—欣赏式探询共读会
  12. MPI中的Bcast, Reduce和Gather使用举例
  13. 基于卷积神经网络CNN的图片分类实现——附代码
  14. 前端开发Vue项目实战:电商后台管理系统(八)------ 订单管理模块
  15. [答疑]类图:支付手段和优惠券、金额、积分有关
  16. Apache Solr 任意文件读取
  17. 宇视摄像机网页界面登录“提示加载插件失败,点击下载安装最新插件”
  18. python3格式化输出
  19. NOIP-2018 提高组(复赛) 模拟试题之--T1 帽子戏法
  20. 软件架构师:走钢索的人

热门文章

  1. nashorn 性能_Oracle Nashorn:用于JVM的下一代JavaScript引擎
  2. Ubuntu系统安装opencv详细操作及具体应用
  3. 房地产开发流程与操作步骤
  4. Matlab中值滤波与平滑滤波
  5. iRepor多张报表连续输出
  6. 自然语言处理中的中文词性、标记规范及其应用
  7. IQ 调制器和 IQ 解调器
  8. 视觉里程计 matlab实现,视觉里程计
  9. Layui模块化前端框架开箱使用
  10. FFmpeg集成qsv的编译安装