两集合以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中出现垃圾数据。这些垃圾数据可以定期清理掉。