GridFS首先会在当前数据库创建两个集合:"fs.files"和"fs.chunks"集合,前者记录了文件名,文件创建时间,文件类型等基本信息;后者分块存储了文件的二进制数据(并支持加密这些二进制数据)。分块的意思是把文件按照指定大小分割,然后存入多个文档中。"fs.files"怎么知道它对应的文件二进制数据在哪些块呢?那是因为在"fs.chunks"中有个"files_id"键,它对应"fs.files"的"_id"。"fs.chunks"还有一个键(int型)"n",它表明这些块的先后顺序。这两个集合名中的"fs"也是可以通过参数自定义的。
官方文档
http://www.mongodb.org/display/DOCS/GridFS
http://www.mongodb.org/display/DOCS/GridFS+Specification
http://api.mongodb.org/java/2.13/
下面我们用mongo-java-driver来实现文件的读取。
MongoGridFSTest.java
package cn.slimsmart.mongodb.demo.crud; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.InputStream; import java.net.UnknownHostException; import com.mongodb.BasicDBObject; import com.mongodb.DB; import com.mongodb.DBObject; import com.mongodb.MongoClient; import com.mongodb.gridfs.GridFS; import com.mongodb.gridfs.GridFSDBFile; import com.mongodb.gridfs.GridFSInputFile; public class MongoGridFSTest { private static MongoClient mongoClient = null; private static DB db = null; private static GridFS gridFS = null; private static String dbName = "gridfs"; public static void main(String[] args) throws UnknownHostException, Exception { mongoClient = new MongoClient("192.168.36.61", 23000); db = mongoClient.getDB(dbName); gridFS = new GridFS(db); String file = "src/main/resources/20150315172324.png"; if(!new File(file).exists()){ System.out.println("file is not exists."); } String fileName = "20150315172324.png"; //把文件保存到gridfs中,并以文件的md5值为id save(new FileInputStream(file), fileName,fileName); //据文件名从gridfs中读取到文件 GridFSDBFile gridFSDBFile = getByFileName(fileName); if(gridFSDBFile != null){ System.out.println("filename:" + gridFSDBFile.getFilename()); System.out.println("md5:" + gridFSDBFile.getMD5()); System.out.println("length:" + gridFSDBFile.getLength()); System.out.println("uploadDate:" + gridFSDBFile.getUploadDate()); System.out.println("--------------------------------------"); gridFSDBFile.writeTo(new FileOutputStream("src/main/resources/20150315172324_out.png")); }else{ System.out.println("can not get file by name:" + fileName); } } /** * 用给出的id,保存文件,透明处理已存在的情况 * id 可以是string,long,int,org.bson.types.ObjectId 类型 * @param in * @param id */ public static void save(InputStream in, Object id,String fileName){ DBObject query = new BasicDBObject("_id", id); GridFSDBFile gridFSDBFile = gridFS.findOne(query); if(gridFSDBFile == null){ GridFSInputFile gridFSInputFile = gridFS.createFile(in); gridFSInputFile.setId(id); gridFSInputFile.setFilename(fileName); //gridFSInputFile.setChunkSize(); //gridFSInputFile.setContentType(); //gridFSInputFile.setMetaData(); gridFSInputFile.save(); } } /** * 据id返回文件 * @param id * @return */ public static GridFSDBFile getById(Object id){ DBObject query = new BasicDBObject("_id", id); GridFSDBFile gridFSDBFile = gridFS.findOne(query); return gridFSDBFile; } /** * 据文件名返回文件,只返回第一个 * @param fileName * @return */ public static GridFSDBFile getByFileName(String fileName){ DBObject query = new BasicDBObject("filename", fileName); GridFSDBFile gridFSDBFile = gridFS.findOne(query); return gridFSDBFile; } }
参考文章:
相关推荐
功能:基于mongodb gridfs实现简单文件上传、下载、搜索、删除。 开发环境:VS2012 mongodb驱动:官方Driver 上传控件:jquery uploadify 疑问:sort()方法可能有点问题 PS:有问题可以留言,欢迎交流~
Mongodb基于GridFS存储文件,通过流的方式存储文件图片,以及读取功能。本人亲自测试、编写。值得信赖
基于node.js、vue、mongodb等技术构建的web系统,界面美观,功能齐全,适合用作毕业设计、课程设计作业等,项目均经过测试,可快速部署运行! 基于node.js、vue、mongodb等技术构建的web系统,界面美观,功能齐全,...
Java 操作Mongodb中存储的文件的实例
gridfs2s3 - 将 MongoDB GridFS 文件迁移到 AWS S3 的工具 这是一个简单的工具,它将抓取您指向的 GridFS 中的所有文件,并将它们粘贴到 S3 中 安装 go install github.com/Bowbaq/gridfs2s3 用法 gridfs2s3 -h flag...
MongoDB GridFS.pdf 学习资料 复习资料 教学资源
Mongodb的gridfs的C#的例子
主要介绍了PHP MongoDB GridFS 存储文件的方法详解的相关资料,需要的朋友可以参考下
java+mongDB做文件服务器,用于文件存储,写了个简单文件上传下载删除DEMO,用eclipse import项目即可。
网站大量图片存储需要用到Mongodb,本代码中以图片上传、图片更新、图片删除为例子,展示了以GridFS方式对文件进行存取。
mongodb 所需jar包及gridfs java示例代码
NULL 博文链接:https://chwshuang.iteye.com/blog/2065974
我正在尝试从GridFS读取3种不同的部署(不同的MongoDB驱动程序)。 并将结果与经典的Nginx配置进行比较。贡献者( ) ( )构型1,Nginx location /files/ { alias /home/ubuntu/;}测试期间, open_file_cache...
NULL 博文链接:https://shift-alt-ctrl.iteye.com/blog/2195646
利用mongodb存储文件,前台使用百度webuploader的文件md5实现断点续传,一次上传,下次秒传,解决文件重复问题,避免数据冗余,文件上传后支持下载, 特定格式支持在线预览,office转pdf后前台新页面显示pdf,相关...
本篇文章是对PHP操作MongoDB GridFS存储文件进行了详细的分析介绍,需要的朋友参考下
mongodb-java-driver-4.4.0.jar
mongodb for java api 英文版
MongoDB.GridFS.dll c#类库...............................................