1. 配置config

spring:

data:

mongodb:

uri: mongodb://username:password@192.168.2.72:27017

database: mydb

@Component

public class WebConfig {

@Value("${spring.data.mongodb.database}")

private String mongodb;

@Bean

public GridFSBucket getGridFSBucket(MongoClient mongoClient){

MongoDatabase database = mongoClient.getDatabase(mongodb);

GridFSBucket bucket = GridFSBuckets.create(database);

return bucket;

}

}

2. 基于gridfs的上传,读取与下载

@Autowired

private GridFSBucket gridFSBucket;

/**

* 创建文件到GirdFS

* @param model

* @return

* @throws Exception

*/

@GetMapping("/addToGridFS")

@ResponseBody

public Object addToGirdFS(Model model) throws Exception {

// 声明freemarker的配置类

Configuration cfg = new Configuration(Configuration.getVersion());

// 声明freemarker模板所需要加载的目录位置

String classpath = this.getClass().getResource("/").getPath();

cfg.setDirectoryForTemplateLoading(new File(classpath + "templates"));

// System.out.println(classpath + "templates");

// 构建数据

model = makeModel(model);

// 加载ftl模板

Template template = cfg.getTemplate("user.ftl", "utf-8");

// 获得静态化后的内容

String htmlContent = FreeMarkerTemplateUtils.processTemplateIntoString(template, model.asMap());

InputStream inputStream = IOUtils.toInputStream(htmlContent);

// 上传

ObjectId fileId = gridFSBucket.uploadFromStream("1001.html", inputStream);

System.out.println("上传完成。 文件ID:" + fileId);

// 文件在mongodb中的id

return fileId.toString();

}

/**

* 读取文件

* @param model

* @return

* @throws Exception

*/

@GetMapping("/readGridFS")

@ResponseBody

public String readGridFS(Model model) throws Exception {

// 获取文件ID

String objectId = "5e42924980fb940ab75f141a"; // 根据upload后文件ID修改

// 获取内容

GridFSFindIterable gridFSFindIterable = gridFSBucket.find(Filters.eq("_id", new ObjectId(objectId)));

GridFSFile gridFSFile = gridFSFindIterable.first();

System.out.println("filename: " + gridFSFile.getFilename());

return gridFSFile.getFilename();

}

/**

* 从gridfs中下载文件

* @throws Exception

*/

@GetMapping("/downloadGridFS")

@ResponseBody

public String downloadGridFS() throws Exception {

// 获取文件ID

String objectId = "5e42924980fb940ab75f141a";

// 获取文件流,定义存放位置和名称

File file = new File(htmlTarget + "/1001.html");

// 创建输出流

OutputStream os = new FileOutputStream(file);

// 执行下载

gridFSBucket.downloadToStream(new ObjectId(objectId), os);

System.out.println("下载成功");

return "ok";

}

@GetMapping("/downloadGridFSByFileName")

@ResponseBody

public String downloadGridFSByFileName() throws Exception {

// 获取文件ID

String filename = "1001.html";

// 获取文件流,定义存放位置和名称

File file = new File(htmlTarget + "/" + filename);

// 创建输出流

OutputStream os = new FileOutputStream(file);

// 执行下载

gridFSBucket.downloadToStream(filename, os);

System.out.println("下载成功");

return "ok";

}

/**

* 删除文件

* @param model

* @return

* @throws Exception

*/

@GetMapping("/deleteGirdFS")

@ResponseBody

public String deleteGirdFS(Model model) throws Exception {

// 获取文件ID

String objectId = "5e42924980fb940ab75f141a";

// 执行删除

gridFSBucket.delete(new ObjectId(objectId));

return "ok";

}

5. 整合SpringBoot作为文件服务展示

当然也能和nginx放在一起使用

/**

* 借助nginx+springboot来访问gridfs中的文件内容

* @param fileName

* @return

* @throws Exception

*/

@GetMapping("/detail/{fileName}")

public void detail(@PathVariable("fileName") String fileName, HttpServletResponse response) throws Exception {

response.setContentType("text/html;charset=utf-8");

ServletOutputStream outputStream = null;

try {

outputStream = response.getOutputStream();

gridFSBucket.downloadToStream(fileName, outputStream);

// 方式2

// GridFSDownloadStream gridFSDownloadStream = gridFSBucket.openDownloadStream(fileName);

// GridFsResource gridFsResource = new GridFsResource(gridFSDownloadStream.getGridFSFile(), gridFSDownloadStream);

// String data = IOUtils.toString(gridFsResource.getInputStream(), "UTF-8");

// System.out.println(data);

// out.write(data.getBytes("UTF-8"));

// out.write("风间影月".getBytes("UTF-8"));

} finally {

outputStream.close();

}

}

java mongodb gridfs_MongoDB-4 GridFS 文件存储相关推荐

  1. MongoDB 一个基于分布式文件存储的数据库

    简介 MongoDB是一个基于分布式文件存储的数据库.由C++语言编写.旨在为WEB应用提供可扩展的高性能数据存储解决方案. 特点 它的特点是高性能.易部署.易使用,存储数据非常方便.主要功能特性有: ...

  2. java mongodb gridfs_MongoDB学习笔记之GridFS使用介绍

    GridFS简介 GridFS是MongoDB中的一个内置功能,可以用于存放大量小文件. GridFS使用 MongoDB提供了一个命令行工具mongofiles可以来处理GridFS, 列出所有文件 ...

  3. java预分配 磁盘_java – 为文件存储预分配驱动器空间

    @H_301_1@是否有Java方法为应用程序中的独占使用预先分配驱动器空间? @H_301_1@不要求此空间是单独的文件系统或现有文件系统的一部分(因此很容易成为数据库),但它应该允许保留指定的空间 ...

  4. BigData之MongoDB:MongoDB基于分布式文件存储数据库的简介、下载、案例应用之详细攻略

    BigData之MongoDB:MongoDB基于分布式文件存储数据库的简介.下载.案例应用之详细攻略 目录 MongoDB的简介 1.MongoDB的主要功能特性 2.对MongoDB进行增删改查( ...

  5. Android基础知识(二十一):Android五大存储之文件存储、Content Provider存储和网络存储

    Android基础知识(二十一):Android五大存储之文件存储.Content Provider存储和网络存储 一.Android存储--持久化技术 数据持久化是指将那些内存中的瞬时数据保存到存储 ...

  6. SpringBoot+MongoDB GridFS文件上传、下载、预览实战

    SpringBoot + MongoDB GridFS 随着web 3.0的兴起,数据的形式不局限于文字,还有语音.视频.图片等.高效存储与检索二进制数据也成为web 3.0必须要考虑的问题.然而这种 ...

  7. 分布式文件存储--MongoDB

    MongoDB 是一个基于分布式文件存储的数据库.由 C++ 语言编写.旨在为 WEB 应用提供可扩展的高性能数据存储解决方案. MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系 ...

  8. (解析+源码)基于JAVA Swing+MySQL实现学生信息管理系统(增、删、改、查)数据库/文件存储

    根据学校对学生信息日常管理需要,学生信息管理系统包括以下功能: 登录系统: 新建学生信息:添加学生信息: 删除学生信息:对指定学生信息进行删除: 修改学生信息:对指定学生信息进行修改 查找学生信息:输 ...

  9. 盲沟低比?不不不,是芒果的笔,今天学一下分布式文件存储数据库MongoDB。

    老样子先上图,上一篇NOSQL有大佬说要把首图的数据库全部学习了,今天特意只上了一张小图,一个就够了! 文章目录 前言 一.MongoDB 历史 二.MongoDB 支持语言 三.MongoDB 与关 ...

最新文章

  1. 创建mysql数据库,在新数据库中创建表,再尝试删除表
  2. Python练手小项目
  3. 表名含有后缀 mysql 怎么删除_mysql批量删除指定前缀或后缀表
  4. ASP.NET MVC中controller和view相互传值的方式
  5. win11怎么回退原系统 Windows11回退的步骤方法
  6. DotCMS安装步骤
  7. Egret入门学习日记 --- 第十二篇(书中 5.1节 内容)
  8. 读取视频并将视频转换成图片
  9. 如何防止短信API接口遍历
  10. html-5表白神器源码,html5开发表白神器实现代码
  11. 机器人改变生活利弊英语作文_机器人的危害英语作文
  12. PowerBI自动切换中英文单位
  13. (详细思路)利用py批量下载某站的视频
  14. Linux命令整理(二)
  15. 华为跑了?深圳终究留不住华为
  16. 如何在web端登录企业邮箱? 163企业邮箱怎么登陆?
  17. 前端框架MVC和MVVM的理解
  18. NewstartHA 配置技巧
  19. vue-json-excel 使用方法 导出excel 详解 以及实际操作 ,通俗易懂
  20. ImageNet调查报告

热门文章

  1. 提取单元格中某字符最后出现位置之前的数据
  2. html图片excel路径,jsp方式导出Excel能不能导出图片_html/css_WEB-ITnose
  3. 好佳居窗帘十大品牌 窗帘的发展故事
  4. 素描嘴巴注意这几个点,轻松画出头像神韵~
  5. 从20s优化到500ms,我用了这三招
  6. PSAM卡相关知识整理
  7. 内网渗透之域内信息收集
  8. 商城app被攻击了之后我们应该怎么处理?
  9. [CodeForces]CodeForces - 1025F Disjoint Triangles
  10. 快速编程的捷径——计算机达人成长之路(40)