什么是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;@Beanpublic 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")));
}

SpringBoot中使用GridFS相关推荐

  1. 在SpringBoot中使用Spring Session解决分布式会话共享问题

    在SpringBoot中使用Spring Session解决分布式会话共享问题 问题描述: 每次当重启服务器时,都会导致会员平台中已登录的用户掉线.这是因为每个用户的会话信息及状态都是由session ...

  2. SpringBoot 中 JPA 的使用

    前言 第一次使用 Spring JPA 的时候,感觉这东西简直就是神器,几乎不需要写什么关于数据库访问的代码一个基本的 CURD 的功能就出来了.下面我们就用一个例子来讲述以下 JPA 使用的基本操作 ...

  3. 难以想象SpringBoot中的条件注解底层居然是这样实现的

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 来源 | https://urlify.cn/bm2qqi Spr ...

  4. 面试:SpringBoot中的条件注解底层是如何实现的?

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 来源 | https://urlify.cn/bm2qqi Spr ...

  5. springboot yml怎么建常量_【Java】SpringBoot 中从application.yml中获取自定义常量

    由于这里我想通过java连接linux,connection连接需要host.port.username.password及其他路径等等.不想每次修改的时候都去改源文件,所以想写在applicatio ...

  6. Springboot中给图片添加文字水印

    Springboot中给图片添加文字水印 工作中遇到给图片添加文字水印的需求,记录下来方便之后查阅 需求内容: 给一张图片添加指定文字水印,使一张图片上有多个水印内容,并且设定一个水印开关,可指定是否 ...

  7. 你知道如何在springboot中使用redis吗

    特别说明:本文针对的是新版 spring boot 2.1.3,其 spring data 依赖为 spring-boot-starter-data-redis,且其默认连接池为 lettuce ​  ...

  8. WebSocket的故事(六)—— Springboot中,实现更灵活的WebSocket

    概述 WebSocket的故事系列计划分五大篇六章,旨在由浅入深的介绍WebSocket以及在Springboot中如何快速构建和使用WebSocket提供的能力.本系列计划包含如下几篇文章: 第一篇 ...

  9. SpringBoot 中 @RestController 和 @Controller 的区别

    1 - 在springboot中,@RestController 相当于 @Controller + @ResponseBody; 2 - 即在Controller类中,若想返回jsp或html页面, ...

最新文章

  1. mysql 获取距离当前最新的记录_一文带你了解 MySQL 中的各种锁机制!
  2. 【安全漏洞】Rocket.Chat 远程命令执行漏洞分析
  3. 二一、MDT 2013 Update 1批量部署-客户端批量授权利用KMS服务器激活
  4. iOS使用UIBezierPath实现ProgressView
  5. 工作111:对element-form的理解
  6. onvif学习笔记3:NTP命令实现的示例
  7. 设计模式系列之「观察者模式」
  8. python中heading_python基础===trheading 模块
  9. 员工自动离职可以申请经济补偿吗
  10. scala入门学习之类的使用
  11. 如何使用工时表软件跟踪时间和成本?
  12. matlab用imcrop进行图片裁剪,并用imwrite存图
  13. html播放韰 寸 频,asp.net 汉字转换拼音及首字母实现代码
  14. 渗透测试学习笔记之案例一
  15. 【转】Jsp自定义标签详解
  16. XCTF-高手进阶区:mfw
  17. 理解分布式账本技术: 经济学视角
  18. 论文阅读——INSIDER:Designing In-Storage Computing System for Emerging High-Performance Drive
  19. java集合框架的练习之斗地主洗牌发牌的模拟(升级版)
  20. python 定时器、每天凌晨3点执行方法_python 定时器,实现每天凌晨3点执行的方法...

热门文章

  1. mfc实验报告心得体会_MFC基本应用程序的建立实验报告
  2. 设计了一个支撑 数亿 用户的系统
  3. 从远程仓库拉取到本地仓库
  4. golang不编译.html,Golang编译-ldflags -X 在vendor中不生效的问题
  5. 相机标定——单目标定和双目标定
  6. 分布式session的4种解决方案
  7. php分布式session问题,分布式session一致性问题
  8. 不完全双列杂交种遗传力的计算方法
  9. 设置vscode打开文件会打开新标签,不会覆盖当前的标签
  10. 卷积神经网络详解 - 卷积层逻辑篇