设为首页 收藏本站
查看: 1049|回复: 0

[经验分享] MongoDB 的 GridFS 详细分析

[复制链接]

尚未签到

发表于 2018-10-27 11:26:26 | 显示全部楼层 |阅读模式
  from: http://www.open-open.com/lib/view/open1330171884015.html
GridFS简介
  GridFS是MongoDB中的一个内置功能,可以用于存放大量小文件。
  http://www.mongodb.org/display/DOCS/GridFS
  http://www.mongodb.org/display/DOCS/GridFS+Specification
GridFS使用
  MongoDB提供了一个命令行工具mongofiles可以来处理GridFS,在bin目录下。
  列出所有文件:
  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类型,默认会忽略
使用MongoVUE来查看,管理GridFS
  MongoVUE地址:http://www.mongovue.com/
  MongoVUE是个免费软件,但超过15天后功能受限。可以通过删除以下注册表项来解除限制:
  [HKEY_CURRENT_USER\Software\Classes\CLSID\{B1159E65-821C3-21C5-CE21-34A484D54444}\4FF78130]
  把这个项下的值全删掉就可以了。
用java驱动上传下载文件:
  下载地址:https://github.com/mongodb/mongo-java-driver/downloads
  官方的文档貌似不是最新的,不过通过查看api来使用也不困骓。
  http://api.mongodb.org/java/2.7.2/
  以下代码基于mongo-2.7.3.jar
001importjava.io.FileInputStream;002importjava.io.IOException;003importjava.io.InputStream;004importjava.net.UnknownHostException;005importjava.security.NoSuchAlgorithmException;006007importcom.mongodb.BasicDBObject;008importcom.mongodb.DB;009importcom.mongodb.DBCollection;010importcom.mongodb.DBObject;011importcom.mongodb.Mongo;012importcom.mongodb.MongoException;013importcom.mongodb.gridfs.GridFS;014importcom.mongodb.gridfs.GridFSDBFile;015importcom.mongodb.gridfs.GridFSInputFile;016017publicclassTest {018Mongo connection;019DB db;020DBCollection collection;021GridFS myFS;022023String mongoDBHost = "127.0.0.1";024intmongoDBPort = 27017;025String dbName = "testGridfs";026String collectionName = "fs";027028publicstaticvoidmain(String[] args) throwsMongoException, IOException, NoSuchAlgorithmException {029Test t = newTest();030031String fileName = "F:/CPU.txt";032String name = "CPU.txt";033034//把文件保存到gridfs中,并以文件的md5值为id035t.save(newFileInputStream(fileName), name);036037//据文件名从gridfs中读取到文件038039GridFSDBFile gridFSDBFile = t.getByFileName(name);040if(gridFSDBFile != null){041System.out.println("filename:"+ gridFSDBFile.getFilename());042System.out.println("md5:"+ gridFSDBFile.getMD5());043System.out.println("length:"+ gridFSDBFile.getLength());044System.out.println("uploadDate:"+ gridFSDBFile.getUploadDate());045046System.out.println("--------------------------------------");047gridFSDBFile.writeTo(System.out);048}else{049System.out.println("can not get file by name:"+ name);050}051}052053publicTest() throwsUnknownHostException, MongoException, NoSuchAlgorithmException {054_init();055}056057058publicTest(String mongoDBHost, intmongoDBPort, String dbName,059String collectionName) throwsUnknownHostException, MongoException, NoSuchAlgorithmException {060this.mongoDBHost = mongoDBHost;061this.mongoDBPort = mongoDBPort;062this.dbName = dbName;063this.collectionName = collectionName;064_init();065}066067068privatevoid_init() throwsUnknownHostException, MongoException, NoSuchAlgorithmException{069connection = newMongo(mongoDBHost, mongoDBPort);070db = connection.getDB(dbName);071collection = db.getCollection(collectionName);072myFS = newGridFS(db);073}074075/**076* 用给出的id,保存文件,透明处理已存在的情况077*>078* @param in079* @param>080*/081publicvoidsave(InputStream in, Object>082DBObject query  = newBasicDBObject("_id",>083GridFSDBFile gridFSDBFile = myFS.findOne(query);084085if(gridFSDBFile != null)086return;087088GridFSInputFile gridFSInputFile = myFS.createFile(in);089gridFSInputFile.save();090return;091}092093/**094* 据id返回文件095* @param>096* @return097*/098publicGridFSDBFile getById(Object>099DBObject query  = newBasicDBObject("_id",>100GridFSDBFile gridFSDBFile = myFS.findOne(query);101returngridFSDBFile;102}103104/**105* 据文件名返回文件,只返回第一个106* @param fileName107* @return108*/109publicGridFSDBFile getByFileName(String fileName){110DBObject query  = newBasicDBObject("filename", fileName);111GridFSDBFile gridFSDBFile = myFS.findOne(query);112returngridFSDBFile;113}114}

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-627078-1-1.html 上篇帖子: mac下安装mongodb 下篇帖子: mongodb 的 GridFS 详细分析(二)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表