mongodb开发---GridFS文件存储

周鸿云
2023-12-01
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中出现垃圾数据。这些垃圾数据可以定期清理掉。

 类似资料: