mongodb Gridfs操作
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: new Date(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操作的更多相关文章
- Spring Boot使用MongoDB GridFS进行文件的操作
1. GridFS简介 GridFS 用于存储和恢复那些超过16M(BSON文件限制)的文件(如:图片.音频.视频等),但是它是存储在MonoDB的集合中. GridFS 会将文件对象分割成多个的ch ...
- MongoDB学习笔记(五) MongoDB文件存取操作
由于MongoDB的文档结构为BJSON格式(BJSON全称:Binary JSON),而BJSON格式本身就支持保存二进制格式的数据,因此可以把文件的二进制格式的数据直接保存到MongoDB的文档结 ...
- MongoDb GridFS的使用
MongoDb GridFS 是MongoDB的文件存储方案,主要用于存储和恢复那些超过16M(BSON文件限制)的文件(如:图片.音频等),对大文件有着更好的性能. 要在C#中使用GridFS,首先 ...
- MongoDB GridFS最佳应用概述
<MongoDB GridFS最佳应用概述> 作者:chszs,转载需注明.博客主页:http://blog.csdn.net/chszs GridFS是MongoDB数据库之上的一个简单 ...
- CentOS6.3搭建Nginx代理访问MongoDB GridFS图片资源
PHP可以直接读取MongoDB GridFS中的图片并显示到页面中,但对PHP的压力就大了.偶然机会,了解到Nginx可以代理访问,实现过程如下: 1.工具准备 安装一些必要的编译工具及库,这里是直 ...
- MongoDB查询操作限制返回字段的方法
这篇文章主要介绍了MongoDB查询操作限制返回字段的方法,需要的朋友可以参考下 映射(projection )声明用来限制所有查询匹配文档的返回字段.projection以文档的形式列举结果集中 ...
- EasyUI-datagrid数据展示+MongoDB数据操作
使用EasyUI-datagrid进行数据展示:进行添加,修改,删除操作逻辑代码,数据源来自MongoDB. 一.新建SiteInfo控制器,添加Index页面:http://www.cnblogs. ...
- Mongodb Manual阅读笔记:CH2 Mongodb CRUD 操作
2 Mongodb CRUD 操作 Mongodb Manual阅读笔记:CH2 Mongodb CRUD 操作Mongodb Manual阅读笔记:CH3 数据模型(Data Models)Mong ...
- MongoDB的学习和使用(MongoDB GridFS)
MongoDB GridFS GridFS 用于存储和恢复那些超过16M(BSON文件限制)的文件(如:图片.音频.视频等). GridFS 也是文件存储的一种方式,但是它是存储在MonoDB的集合中 ...
随机推荐
- 【转载】rageagainstthecage.c源码以及注释
如下: //头文件包含 #include <stdio.h> #include <sys/types.h> #include <sys/time.h> #inclu ...
- 并不对劲的loj3048:p5283:[十二省联考]异或粽子
题目大意 有\(n\)(\(n\leq5\times10^5\))个数\(a_1,a_2,...a_n\)(\(a_i\leq 2^{32}-1\)) 求区间异或和前\(k(k\leq2\times1 ...
- Python使用multiprocessing实现一个最简单的分布式作业调度系统
Python使用multiprocessing实现一个最简单的分布式作业调度系统介绍Python的multiprocessing模块不但支持多进程,其中managers子模块还支持把多进程分布到多台机 ...
- Tensorboard 的简单使用
确保环境以及安装好tensorflow以及tensorboard 下面通过一个简单的例子来显示一下使用方式,一个向量加法的图结构. import tensorflow as tf a = tf.con ...
- bzoj 4260 Codechef REBXOR——trie树
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4260 一段的异或和就是两个前缀的异或和.正反扫两边,用trie树算每个位置为左/右端点时最大 ...
- 《Linux内核修炼之道》精华分享与讨论(5)——Kernel地图:Kconfig与Makefile
转自:http://blog.csdn.net/fudan_abc/article/details/5340408 Makefile不是Make Love 从前在学校,混了四年,没有学到任何东西,每天 ...
- Linux 无法登陆172.***.***.***的子网
1. sudo dhclient -r 这条命令重复执行几次 2. dhclient - 3.查看ifconfig
- log4j的学习和log4j在程序中使用的加载作用过程
昨天进行代码评审的时候,大家都纠结在了日志信息应该如何输出上,其实我想大家应该一直都在使用log4j来对日志信息进行输出,但是未想应该有很大一部分人对log4j是不了解的,我遇到这个问题的时候也到网上 ...
- 【Data structure & Algorithm】把二元查找树转变成排序的双向链表
把二元查找树转变成排序的双向链表 题目:输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表,要求不能创建任何新节点,只调整指针指向. 比如将二元查找树 10 / \ 6 ...
- 怎样使一个INPUT框里的文字在框被点击后自动全选或清除?
$("#smsContent").focus(function(){ this.select(); }); <input name="keywords" ...