list123342 发表于 2018-10-27 11:26:26

MongoDB 的 GridFS 详细分析

  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天后功能受限。可以通过删除以下注册表项来解除限制:
  
  把这个项下的值全删掉就可以了。
用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]
查看完整版本: MongoDB 的 GridFS 详细分析