目录
- 文档目标
验证通过GridFS提供的API访问GridFS,并对GridFS提供的功能进行验证
- MongoDB:GridFS底层依然是MongoDB存储,因此需要先安装好MongoDB数据库,MongoDB数据库可以从官网下载,目前最新版本是V3.4.2
下载地址:https://www.mongodb.com/download-center
- Java驱动包:目前最新版本也是3.4.2,可从Maven中央仓库下载:mongo-java-driver-3.4.2.jar
- MongoDB的windows版本,不支持win32平台;
- 安装包选择了包含SSL的版本:
mongodb-win32-x86_64-2008plus-ssl-3.4.2-signed.msi
- 提供msi格式,双击直接安装即可;
- 这里安装目录为:D:\Program Files\MongoDB。安装后如下图所示:
- 创建一个目录,作为数据存储目录:D:\Program Files\MongoDB\Server\dbData
- 打开命令行,切换到bin目录下,执行命令,启动MongoDB;
mongod --dbpath "D:\Program Files\MongoDB\Server\dbData"
- 打开另外命令行,切换到bin目录下,输入“mongo“,启动shell程序
- 输入命令“use udetest”切换到udetest数据库(此时并没有真正创建)
- 添加一条记录:db.udetest.insert({"name": "udetest"}),数据库创建成功:
Mongodb默认启动是不带认证,也没有账号,只要能连接上服务就可以对数据库进行各种操作,为了保证数据库安全,需要添加用户,并开启认证
- 执行命令,创建用户
db.createUser({ user:"udetest",pwd: "udetest", roles: [ "readWrite", "dbAdmin" ] })
上面的命令执行后,在数据库udetest上,创建一个用户(用户名udetest,密码udetest),这个用户用于读写和管理权限。
- 在MongoDB的命令行窗口,执行Ctrl + C,停止MongoDB;
- 启动MongoDB,添加auth参数,开启认证:
mongod --dbpath "D:\Program Files\MongoDB\Server\dbData" --auth
这样就必须通过用户名和密码认证,才能连接到数据库了
- MongoDB的linux版本,不支持win32平台;
- 由于验证时的操作系统SSL版本过低,也无法通过联网方式更新,故选择了不包含SSL的版本,安装包是.tgz格式:
mongodb-linux-x86_64-3.4.2.tgz
- 将压缩包拷贝到心痛目录,运行命令解压:
tar –zxvf ./ mongodb-linux-x86_64-3.4.2.tgz
- 运行chmod命令授权
chmod a+x ./mongodb-linux-x86_64-3.4.2/ -R
- 创建一个目录,作为数据存储目录:dbData
- 打开命令行,切换到bin目录下,执行命令,启动MongoDB;
./mongod --dbpath /home/ude/GridFS/dbData/
- 打开另外命令行,切换到bin目录下,输入“mongo“,启动shell程序
- 输入命令“use udetest”切换到udetest数据库(此时并没有真正创建)
- 添加一条记录:db.udetest.insert({“name”:“udetest”}),数据库创建成功:
Mongodb默认启动是不带认证,也没有账号,只要能连接上服务就可以对数据库进行各种操作,为了保证数据库安全,需要添加用户,并开启认证
- 执行命令,创建用户
db.createUser(
{
user: "udetest",
pwd: "udetest",
roles: [ "readWrite", "dbAdmin" ]
}
)
上面的命令执行后,在数据库udetest上,创建一个用户(用户名udetest,密码udetest),这个用户用于读写和管理权限。
- 在MongoDB的命令行窗口,执行Ctrl + C,停止MongoDB;
- 启动MongoDB,添加auth参数,开启认证:
./mongod --dbpath /home/ude/GridFS/dbData/ --auth
这样就必须通过用户名和密码认证,才能连接到数据库了
- GridFS接口功能验证
由于我们已经开启了MongoDB的认证,因此在连接GridFS时,必须提供认证信息,如下图所示:
-
- 向GridFS添加数据
关键代码如下图所示:
- 添加数据时,需要先构造查询条件查询;
- 查询不存在,则创建一个文件,支持的类型包括byte[],InputStream,以及File对象;
- 调用save方法,保存文件;
- 支持获取保存后文件的MD5,可以与保存前文件MD5做对比
- 从GridFS读取文件
关键代码如下图所示:
- 获取数据时,需要先构造查询条件查询;
- 查询存在,通过writeTo方法,将数据写入到文件;
- writeTo方法,支持将数据写入到流中
关键代码如下图所示:
- 通过文件名称查询,然后删除文件
1、从公开的GridFS接口看,没有直接提供断点续传功能
2、GridFS底层是MongoDB存储,也采用了多块存储的方式,因此可以通过扩展驱动的方式,支持断点续传:需要进一步验证后,才能估计工作量。
由于GridFS底层采用MongoDB存储,因此GridFS的安全控制是可以通过MongoDB实现的。具体请参考连接GridFS(安全控制)