首先我们先说上传文件到GridFs;上传文件到GridFs上相对比较简单,只需要GridFsTemplate的store方法;
1.上传文件
如果文件为String类型则我们需要将其转化为inputstream的流对象,然后在调用store方法,如果需要返回字符串类型则可以使用tostring方法;
InputStream inputStream = IOUtils.toInputStream(htmlContent, "utf-8");
//将html文件上传到GridFs上,返回值为上传文件的id
ObjectId store = gridFsTemplate.store(inputStream, cmsPage.getPageName());
//将id转化为string类型
tring htmlFileId = store.toHexString();
2.从GridFS上下载文件
2.1.我们从GridFS上下载文件需要使用到gridFSBucket因此,我们需要创gridFSBucket并交由spring管理,
@Value("${spring.data.mongodb.database}")
String db;
@Bean
public GridFSBucket getGridsBucket(MongoClient mongoClient){
MongoDatabase database = mongoClient.getDatabase(db);
GridFSBucket gridFSBucket = GridFSBuckets.create(database);
return gridFSBucket;
}
2.2.此时我们就可以正式开始写下载的方法了
首先,我们需要使用gridFsTemplate的findOne来查找需要下载的文件,然后使用gridFSBucket的openDownloadStream方法来打开下载流,然后使用GridFsResource来操作下载流,通过getTemplate来获得下载流。
如果你想将下载的文件存在你的电脑上,你也可以创建输出流,通过IOUtils的copy方法来输出;这里我并没有将其存放在本地。
//根据htmlId查询需要下载的对象
GridFSFile gridFSFile = gridFsTemplate.findOne(Query.query(Criteria.where("_id").is(htmlFileId)));
//打开下载流
GridFSDownloadStream downloadStream = gridFSBucket.openDownloadStream(gridFSFile.getObjectId());
//操作下载流 参数一个是需要下载的对象 另一个是下载流
GridFsResource gridFsResource = new GridFsResource(gridFSFile,downloadStream);
//获取下载流
try {
InputStream inputStream = gridFsResource.getInputStream();
return inputStream;
} catch (IOException e) {
log.error("下载模板异常{}",e.getMessage());
e.printStackTrace();
}