MongoDB 的 GridFS 详细分析

释放双眼,带上耳机,听听看~!

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

亲测可用!

给TA打赏
共{{data.count}}人
人已打赏
安全运维

OpenSSH-8.7p1离线升级修复安全漏洞

2021-10-23 10:13:25

安全运维

设计模式的设计原则

2021-12-12 17:36:11

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索