SpringBoot 中使用 GridFS

本贴最后更新于 502 天前,其中的信息可能已经时移世异

什么是 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")));
}
  • Spring

    Spring 是一个开源框架,是于 2003 年兴起的一个轻量级的 Java 开发框架,由 Rod Johnson 在其著作《Expert One-On-One J2EE Development and Design》中阐述的部分理念和原型衍生而来。它是为了解决企业应用开发的复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许使用者选择使用哪一个组件,同时为 JavaEE 应用程序开发提供集成的框架。

    858 引用 • 1422 回帖 • 619 关注
  • MongoDB

    MongoDB(来自于英文单词“Humongous”,中文含义为“庞大”)是一个基于分布式文件存储的数据库,由 C++ 语言编写。旨在为应用提供可扩展的高性能数据存储解决方案。MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,是类似 JSON 的 BSON 格式,因此可以存储比较复杂的数据类型。

    82 引用 • 53 回帖 • 2 关注
  • GridFS
    1 引用

广告 我要投放

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...