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