GridFS
简介
GridFS
是
MongoDB
中的一个内置功能,可以用于存放大量小文件。
链接地址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
地址:链接地址
MongoVUE
是个免费软件,但超过
15
天后功能受限。可以通过删除以下注册表项来解除限制:
[HKEY_CURRENT_USER\Software\Classes\CLSID{B1159E65-821C3-21C5-CE21-34A484D54444}\4FF78130]
把这个项下的值全删掉就可以了。
链接地址用
java
驱动上传下载文件:
下载地址:链接地址
官方的文档貌似不是最新的,不过通过查看
api
来使用也不困骓。
以下代码基于
mongo-2.7.3.jar
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121 1package mongodbDemo;
2
3import java.io.File;
4import java.io.FileInputStream;
5import java.io.IOException;
6import java.io.InputStream;
7import java.net.UnknownHostException;
8import java.security.NoSuchAlgorithmException;
9
10import com.mongodb.BasicDBObject;
11import com.mongodb.DB;
12import com.mongodb.DBCollection;
13import com.mongodb.DBObject;
14import com.mongodb.Mongo;
15import com.mongodb.MongoException;
16import com.mongodb.gridfs.GridFS;
17import com.mongodb.gridfs.GridFSDBFile;
18import com.mongodb.gridfs.GridFSInputFile;
19
20public class Test {
21 Mongo connection;
22 DB db;
23 DBCollection collection;
24 GridFS myFS;
25
26 String mongoDBHost = "127.0.0.1";
27 int mongoDBPort = 27017;
28 String dbName = "testGridfs";
29 String collectionName = "fs";
30
31 public static void main(String[] args) throws MongoException, IOException, NoSuchAlgorithmException {
32 Test t = new Test();
33
34 String fileName = "E:\\July_FM.apk";
35 String name = "July_FM.apk";
36 File file=new File(fileName);
37 System.out.println("file is exit?? "+file.exists());
38 //把文件保存到gridfs中,并以文件的md5值为id
39 t.save(new FileInputStream(file), name);
40
41 //据文件名从gridfs中读取到文件
42
43 GridFSDBFile gridFSDBFile = t.getByFileName(name);
44 if(gridFSDBFile != null){
45 System.out.println("filename:" + gridFSDBFile.getFilename());
46 System.out.println("md5:" + gridFSDBFile.getMD5());
47 System.out.println("length:" + gridFSDBFile.getLength());
48 System.out.println("uploadDate:" + gridFSDBFile.getUploadDate());
49
50 System.out.println("--------------------------------------");
51 gridFSDBFile.writeTo(System.out);
52 }else{
53 System.out.println("can not get file by name:" + name);
54 }
55 }
56
57 public Test() throws UnknownHostException, MongoException, NoSuchAlgorithmException {
58 _init();
59 }
60
61
62 public Test(String mongoDBHost, int mongoDBPort, String dbName,
63 String collectionName) throws UnknownHostException, MongoException, NoSuchAlgorithmException {
64 this.mongoDBHost = mongoDBHost;
65 this.mongoDBPort = mongoDBPort;
66 this.dbName = dbName;
67 this.collectionName = collectionName;
68 _init();
69 }
70
71
72 private void _init() throws UnknownHostException, MongoException, NoSuchAlgorithmException{
73 connection = new Mongo(mongoDBHost, mongoDBPort);
74 db = connection.getDB(dbName);
75 collection = db.getCollection(collectionName);
76 myFS = new GridFS(db);
77 }
78
79 /**
80 * 用给出的id,保存文件,透明处理已存在的情况
81 * id 可以是string,long,int,org.bson.types.ObjectId 类型
82 * @param in
83 * @param id
84 */
85 public void save(InputStream in, Object id){
86 DBObject query = new BasicDBObject("_id", id);
87 GridFSDBFile gridFSDBFile = myFS.findOne(query);
88
89 if(gridFSDBFile != null)
90 return;
91
92 myFS.createFile(in, "July_FM.apk");
93 GridFSInputFile gridFSInputFile =myFS.createFile(in, "July_FM.apk");
94 gridFSInputFile.save();
95
96 return;
97 }
98
99 /**
100 * 据id返回文件
101 * @param id
102 * @return
103 */
104 public GridFSDBFile getById(Object id){
105 DBObject query = new BasicDBObject("_id", id);
106 GridFSDBFile gridFSDBFile = myFS.findOne(query);
107 return gridFSDBFile;
108 }
109
110 /**
111 * 据文件名返回文件,只返回第一个
112 * @param fileName
113 * @return
114 */
115 public GridFSDBFile getByFileName(String fileName){
116 DBObject query = new BasicDBObject("filename", fileName);
117 GridFSDBFile gridFSDBFile = myFS.findOne(query);
118 return gridFSDBFile;
119 }
120}
121
亲测可用!