读取文件
1)在config包中定义Mongodb的配置类,如下: GridFSBucket用于打开下载流对象
需要用到springMVC的一个注解@Configuration,相当于一个bin,用这个注解标识了spring容器启动的时候,会扫描到这个bin,就会把这个bin注册到ioc容器中
@Configuration
从我们配置文件中,读到spring.data.mongodb.database的配置信息xc_cms。因为要创建GridFSBucket对象时需要指定哪个数据库
@Value("${spring.data.mongodb.database}")
创建Bucket对象,为了拿下载流
@Bean
public GridFSBucket getGridFSBucket(MongoClient mongoClient){
MongoDatabase database = mongoClient.getDatabase(db);
GridFSBucket bucket = GridFSBuckets.create(database);
return bucket;
}
可以在test或者任何的bin当中,都可以把gridFSBucket注入进来。注入进来的目的,就是为了通过它打开下载流
读文件
GridFSFile gridFSFile = gridFsTemplate.findOne(Query.query(Criteria.where("_id").is("601e2fa6ad3b6088a8cc7c18")));
findOne方法里面有一个query对象
Criteria是一个条件对象,是用来拼装条件对象,根据_id字段查询,_id的具体的值为就是上个文件id601e2fa6ad3b6088a8cc7c18
Criteria.where("_id").is("5b9cb02435794805b43b2b04")
@Autowired
GridFSBucket gridFSBucket;
//取文件
@Test
public void queryFile() throws IOException {
//根据文件id查询文件
GridFSFile gridFSFile = gridFsTemplate.findOne(Query.query(Criteria.where("_id").is("601e2fa6ad3b6088a8cc7c18")));
//打开一个下载流对象
GridFSDownloadStream gridFSDownloadStream = gridFSBucket.openDownloadStream(gridFSFile.getObjectId());
//创建GridFsResource对象,获取流
GridFsResource gridFsResource = new GridFsResource(gridFSFile,gridFSDownloadStream);
//从流中取数据
String content = IOUtils.toString(gridFsResource.getInputStream(), "utf-8");
System.out.println(content);
}