一、文件在数据库中的保存结构
1、文件在MongoDB中,分两个集合保存,.files集合保存文件的基本信息,.chunks保存文件的内容,当文件的内容大于每个chunk的大小,就会进行分块保存,用n字段标示分块序号。
1).files集合
保存文件的基本信息,包括:
filename:文件名
length:文件大小
chunkSize:chunks分块的大小
contentType:文件类型
md5:md5码
uploadDate:保存时间
aliases:别名
2).chunks集合
保存文件的内容,包括:
files_id:文件基本信息在.files集合中的编号
n:chunks的序号,从0开始
data:文件内容
二、JAVA驱动中各类的作用
1、abstract class GridFSFile .files集合的映射
1)是.files集合的映射
2)包括了对.files集合中各个字段的管理
3)提供了对.files集合进行save操作的方法save()
2、GridFSInputFile extends GridFSFile 把文件存到数据库的类
1)继承了.files集合相关内容的管理和操作
2)提供了对.chunks集合进行save操作的方法saveChunks()
3)提供了对.files和.chunks两个集合级联save操作方法save()
4)保存一个完整的文件到数据库中,使用的是GridFSInputFile的save()方法
3、GridFSDBFile extends GridFSFile 从数据库获取文件内容的类
1)继承了.files集合相关内容
2)提供了根据.files集合中的字段_id从.chunks集合中获取对应文件的方法
3)根据2)中的接口,还提供了把文件输出到硬盘、输出和输入流的方法
4、GridFS
1)负责和两个集合进行链接
2)可以对两个集合的命名空间进行设置,默认是fs:fs.files,fs.chunks
3)可以创建能够保存文件到数据的类GridFSInputFile的实例:createFile系列方法
4)可以根据条件查询,并封装成GridFSDBFile集合或实例:find、findOne系列方法
5)可以删除文件(会级联删除数据库中两个集合中对应的数据):remove系列方
三、使用
1、保存
使用GridFS的creatFile创建GridFSInputFile实例,通过该实例的save方法保存文件
2、获取
使用GridFS的find和findOne等方法获取GridFSDBFile的集合或实例,使用GridFSDBFile对象的writeTo系列方法把文件输出到硬盘或者输出流中,或者通过getInputStream方法获取一个InputStream流