|
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}
|
|
|