mongodb开发—GridFS文件存储

首页 / 新闻资讯 / 正文

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