配置类
//用于读取文件时使用
@Configuration
public class MongoConfig {
//数据库名
@Value("${spring.data.mongodb.database}")
String db;
@Bean
public GridFSBucket getGridFSBucket(MongoClient mongoClient){
MongoDatabase database = mongoClient.getDatabase(db);
GridFSBucket bucket = GridFSBuckets.create(database);
return bucket;
}
}
代码
@RunWith(SpringRunner.class)
@SpringBootTest
public class TestGridFS {
@Autowired
private GridFsTemplate gridFsTemplate;
@Autowired
GridFSBucket gridFSBucket;
//存文件
@Test
public void testSaveFile() throws FileNotFoundException {
File file = new File("D:\\tmp\\test2.html");
ObjectId store = gridFsTemplate.store(new FileInputStream(file), "test2.html","");
System.out.println(store);
}
//取文件
@Test
public void queryFile() throws IOException {
String fileId = "5e1c11484616db21a8bdc831";
//根据id查询文件
GridFSFile gridFSFile =
gridFsTemplate.findOne(Query.query(Criteria.where("_id").is(fileId)));
//打开下载流对象
GridFSDownloadStream gridFSDownloadStream =
gridFSBucket.openDownloadStream(gridFSFile.getObjectId());
//创建gridFsResource,用于获取流对象
GridFsResource gridFsResource = new GridFsResource(gridFSFile,gridFSDownloadStream);
//获取流中的数据
String s = IOUtils.toString(gridFsResource.getInputStream(), "utf-8");
System.out.println(s);
}
//删除文件
@Test
public void testDelFile() throws IOException {
//根据文件id删除fs.files和fs.chunks中的记录
gridFsTemplate.delete(Query.query(Criteria.where("_id").is("5e1c11484616db21a8bdc831")));
}
}