什么是 GridFS
GirdFS 是 MongoDB 提供的用于持久化存储文件的模块
在 GridFS 存储文件是将文件分块存储,文件会按照 256KB 的大小分割成多个块进行存储,GridFS 使用两个集合 (collection)存储文件,一个集合是 chunks, 用于存储文件的二进制数据;一个集合是 files,用于存储文件的元数 据信息(文件名称、块大小、上传时间等信息)。
从 GridFS 中读取文件要对文件的各各块进行组装、合并。 详细参考:https://docs.mongodb.com/manual/core/gridfs/
在 SpringBoot 中使用 GridFS
存储文件
@Autowired
GridFsTemplate gridFsTemplate;
@Test
public void GridFsTest() throws FileNotFoundException {
//选择要存储的文件
File file = new File("/Users/xxx/Desktop/xxx.docx");
InputStream inputStream = new FileInputStream(file);
//存储文件并起名称
ObjectId objectId = gridFsTemplate.store(inputStream, "面试宝典");
String id = objectId.toString();
//获取到文件的id,可以从数据库中查找
System.out.println(id);
}
查找文件
创建 GridFSBucket 对象
@Configuration
public class MongoConfig {
@Value("${spring.data.mongodb.database}")
String db;
@Bean
public GridFSBucket getGridFSBucket(MongoClient mongoClient){
MongoDatabase mongoDatabase = mongoClient.getDatabase(db);
GridFSBucket bucket = GridFSBuckets.create(mongoDatabase);
return bucket;
}
}
@Autowired
GridFsTemplate gridFsTemplate;
@Autowired
GridFSBucket gridFSBucket;
@Test
public void queryFile() throws IOException {
String id = "5c1b8fac72884e389ae3df82";
//根据id查找文件
GridFSFile gridFSFile = gridFsTemplate.findOne(new Query(Criteria.where("_id").is(id)));
//打开下载流对象
GridFSDownloadStream gridFS = gridFSBucket.openDownloadStream(gridFSFile.getObjectId());
//创建gridFsSource,用于获取流对象
GridFsResource gridFsResource = new GridFsResource(gridFSFile,gridFS);
//获取流中的数据
String string = IOUtils.toString(gridFsResource.getInputStream(), "UTF-8");
System.out.println(string);
}
删除文件
//删除文件
@Test
public void testDelFile() throws IOException {
//根据文件id删除fs.files和fs.chunks中的记录
gridFsTemplate.delete(Query.query(Criteria.where("_id").is("5c1b8fac72884e389ae3df82")));
}
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于