您的位置:首页 > 数据库 > Mongodb

mongodb开发---GridFS文件存储

2017-03-13 10:05 656 查看
GridFS是MongoDB中的一个内置功能,可以用于存放大量小文件。

GridFS使用两集合来存储文件的元数据和内容。文件的元数据存储在文件集合中,文件的内容存储在块集合中。

两集合以FS。默认使用fs.chunks和fs.files来存储文件。其中fs.files集合存放文件的信息,fs.chunks存放文件数据。

有些内容参考自 http://www.server110.com/mongodb/201404/10124.html
下面是具体的使用方式:

1.引入spring-boot-starter-data-mongodb的依赖。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>

2.注入模版
@Autowired
MongoTemplate mongoTemplate ;

@Autowired
MongoDbFactory dbFactory ;
3.创建GridFsTemplate模版
GridFsTemplate gridfsTemplate = new GridFsTemplate(dbFactory, mongoTemplate.getConverter()) ;
4.保存文件
gridfsTemplate.store(content, filename, contentType, metadata)
gridfsTemplate.store(file.getInputStream(), fileName, file.getContentType(), metadata);
5.查找文件
GridFsTemplate gridfsTemplate = new GridFsTemplate(dbFactory, mongoTemplate.getConverter()) ;

Query query = new Query() ;

//查询条件设置
GridFsCriteria.whereContentType()
GridFsCriteria.where(key)
GridFsCriteria.whereMetaData(metadataKey)

Criteria  criteria = GridFsCriteria.whereFilename() ;
criteria.is(fileName) ;
query.addCriteria(criteria);

Order order = new Order(Sort.Direction.DESC, "uploadDate") ;
Sort sort = new Sort(order) ;
query.with(sort);

GridFSDBFile gridFils = gridfsTemplate.findOne(query)
List<GridFSDBFile> gridFils = gridfsTemplate.find(query) ;

//输入到指定的流、文件、获取输入流。
dbFile.writeTo(Outputstram out )
dbFile.getInputStream()
dbFile.writeTo(file)

//根据文件名查询文件(可以带正则表达式),返回一个Resource
GridFsResource[] gridFsResource = gridFsTemplate.getResources("test*");

6.删除文件
gridfsTemplate.delete(query);

讲GridFSDBFile有什么方法。
GridFSDBFile  Core Methods

The GridFSDBFile  API is quite simple as well:

getInputStream – returns an InputStream from which data can be read
getFilename – gets the filename of the file
getMetaData – gets the metadata for the given file
containsField – determines if the document contains a field with the given name
get – gets a field from the object by name
getId – gets the file’s object ID
keySet – gets the object’s field names

注意事项
1. GridFS不自动处理md5相同的文件,对于md5相同的文件,如果想在GridFS中只有一个存储,要用户自已处理。
Md5值的计算由客户端完成。
2. 因为GridFS在上传文件过程中是先把文件数据保存到fs.chunks,最后再把文件信息保存到fs.files中,所以
如果在上传文件过程中失败,有可能在fs.chunks中出现垃圾数据。这些垃圾数据可以定期清理掉。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Mongodb文件存储