mongo自带有一个实现mongofliles,基本操作如下:
列出所有文件:
mongofiles list
上传一个文件:
mongofiles put xxx.txt
下载一个文件:
mongofiles get xxx.txt
查找文件:
mongofiles search xxx //会查找所有文件名中包含“xxx”的文件
mongofiles list xxx //会查找所有文件名以“xxx”为前缀的文件
参数说明:
–d 指定数据库 ,默认是fs,Mongofiles list –d testGridfs
-u –p 指定用户名,密码
-h 指定主机
-port 指定主机端口
-c 指定集合名,默认是fs
-t 指定文件的MIME类型,默认会忽略
原理:
GridFS在数据库中,默认使用fs.chunks和fs.files来存储文件。
1.fs.files集合存放文件的信息;
2.fs.chunks存放文件数据;
一个fs.files集合中的一条记录内容如下,即一个file的信息如下:
{
"_id" : ObjectId("4f4608844f9b855c6c35e298"), //唯一id,可以是用户自定义的类型
"filename" : "CPU.txt", //文件名
"length" : 778, //文件长度
"chunkSize" : 262144, //chunk的大小
"uploadDate" : ISODate("2012-02-23T09:36:04.593Z"), //上传时间
"md5" : "e2c789b036cfb3b848ae39a24e795ca6", //文件的md5值
"contentType" : "text/plain" //文件的MIME类型
"meta" : null //文件的其它信息,默认是没有”meta”这个key,用户可以自己定义为任意BSON对象
}
对应的fs.chunks中的chunk如下:
{
"_id" : ObjectId("4f4608844f9b855c6c35e299"), //chunk的id
"files_id" : ObjectId("4f4608844f9b855c6c35e298"), //文件的id,对应fs.files中的对象,相当于fs.files集合的外键
"n" : 0, //文件的第几个chunk块,如果文件大于chunksize的话,会被分割成多个chunk块
"data" : BinData(0,"QGV...") //文件的二进制数据,这里省略了具体内容
}
默认chunk的大小是256K:
public static final int DEFAULT_CHUNKSIZE = 256 * 1024;
写入:
如果文件大于chunksize,则把文件分割成多个chunk,再把这些chunk保存到fs.chunks中,最后再把文件信息存入到fs.files中。
读取:
先据查询的条件,在fs.files中找到一个合适的记录,得到“_id”的值,再据这个值到fs.chunks中查找所有“files_id”为“_id”的chunk,并按“n”排序,最后依次读取chunk中“data”对象的内容,还原成原来的文件。
自定义Gridfs的hash函数:
尽管从理论上,无论用什么hash函数,都有可能出现hash值相同,但内容不相同的文件,但是对于GridFS默认使用的md5算法,目前已出现长度和md5值都相同但内容不一样的文件。
如果想要自已改用其它hash算法,可以从驱动入手。因为GridFS在MongoDB中实际也只是两个普通的集合,所以完全可以自已修改驱动,替换下hash算法即可。
注意事项:
1. GridFS不自动处理md5相同的文件,对于md5相同的文件,如果想在GridFS中只有一个存储,要用户自已处理。Md5值的计算由客户端完成。
2. 因为GridFS在上传文件过程中是先把文件数据保存到fs.chunks,最后再把文件信息保存到fs.files中,所以如果在上传文件过程中失败,有可能在fs.chunks中出现垃圾数据。这些垃圾数据可以定期清理掉。
分享到:
相关推荐
gridfs-nginx-plugingridfs-nginx-plugingridfs-nginx-plugingridfs-nginx-plugingridfs-nginx-plugingridfs-nginx-plugingridfs-nginx-plugingridfs-nginx-plugingridfs-nginx-plugingridfs-nginx-plugingridfs-...
Linux利用nginx-gridfs搭建部署,nginx-gridfs-0.8 可用
mongdb+GridFS文件上传
Mongodb的gridfs的C#的例子
linux gridfs图片服务器和rmtp流媒体服务器部署完成 技术:gridfs图片服务器 rmtp流媒体服务器 说明包含: nginx+grids+rmtp安装包 nginx+gridfs+rtmp服务器部署帮助文档.docx linux内网生产环境使用;文档比较...
Laravel开发-gridfs 使用laravel上的gridfs存储文件、图像和文档
nginx-gridfs-0.8.tar.gz
功能:基于mongodb gridfs实现简单文件上传、下载、搜索、删除。 开发环境:VS2012 mongodb驱动:官方Driver 上传控件:jquery uploadify 疑问:sort()方法可能有点问题 PS:有问题可以留言,欢迎交流~
Laravel开发-laravel-gridfs-storage 用于Laravel存储API的MongoDB GridFS集成
linux nginx-gridfs下载资料,保护下载文档,包;内网安装,内网环境使用;有需要的朋友看看,对自己学习工作都很有帮助
Mongodb基于GridFS存储文件,通过流的方式存储文件图片,以及读取功能。本人亲自测试、编写。值得信赖
MongoDB.GridFS.dll c#类库...............................................
springboot 操作mongodb(包含GridFs存储文件),适合对mongodb感兴趣的java开发者
资源分类:Python库 所属语言:Python 使用前提:需要解压 资源全名:django_gridfs_storage-0.0.2-py3-none-any.whl 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059
GridFS 是 MongoDB 下的一个子模块,利用这一模块,可以实现使用MongoDB存储文件,MongoDB 二进制包的bin目录下的mongofile 命令即可模拟实现该功能。
mongodb 所需jar包及gridfs java示例代码
gridfs2s3 - 将 MongoDB GridFS 文件迁移到 AWS S3 的工具 这是一个简单的工具,它将抓取您指向的 GridFS 中的所有文件,并将它们粘贴到 S3 中 安装 go install github.com/Bowbaq/gridfs2s3 用法 gridfs2s3 -h flag...
Java 操作Mongodb中存储的文件的实例
nginx-gridfs存图片方案,nginx-gridfs的源码,里面包含有mongo-c-driver-v0.3.1版本的源码
主要介绍了MongoDB学习笔记之GridFS使用介绍,本文介绍了GridFS的作用、GridFS的一些使用方法、GridFS实现原理及注意事项等,需要的朋友可以参考下