java mongodb gridfs_MongoDB-4 GridFS 文件存储
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 文件存储相关推荐
- MongoDB 一个基于分布式文件存储的数据库
简介 MongoDB是一个基于分布式文件存储的数据库.由C++语言编写.旨在为WEB应用提供可扩展的高性能数据存储解决方案. 特点 它的特点是高性能.易部署.易使用,存储数据非常方便.主要功能特性有: ...
- java mongodb gridfs_MongoDB学习笔记之GridFS使用介绍
GridFS简介 GridFS是MongoDB中的一个内置功能,可以用于存放大量小文件. GridFS使用 MongoDB提供了一个命令行工具mongofiles可以来处理GridFS, 列出所有文件 ...
- java预分配 磁盘_java – 为文件存储预分配驱动器空间
@H_301_1@是否有Java方法为应用程序中的独占使用预先分配驱动器空间? @H_301_1@不要求此空间是单独的文件系统或现有文件系统的一部分(因此很容易成为数据库),但它应该允许保留指定的空间 ...
- BigData之MongoDB:MongoDB基于分布式文件存储数据库的简介、下载、案例应用之详细攻略
BigData之MongoDB:MongoDB基于分布式文件存储数据库的简介.下载.案例应用之详细攻略 目录 MongoDB的简介 1.MongoDB的主要功能特性 2.对MongoDB进行增删改查( ...
- Android基础知识(二十一):Android五大存储之文件存储、Content Provider存储和网络存储
Android基础知识(二十一):Android五大存储之文件存储.Content Provider存储和网络存储 一.Android存储--持久化技术 数据持久化是指将那些内存中的瞬时数据保存到存储 ...
- SpringBoot+MongoDB GridFS文件上传、下载、预览实战
SpringBoot + MongoDB GridFS 随着web 3.0的兴起,数据的形式不局限于文字,还有语音.视频.图片等.高效存储与检索二进制数据也成为web 3.0必须要考虑的问题.然而这种 ...
- 分布式文件存储--MongoDB
MongoDB 是一个基于分布式文件存储的数据库.由 C++ 语言编写.旨在为 WEB 应用提供可扩展的高性能数据存储解决方案. MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系 ...
- (解析+源码)基于JAVA Swing+MySQL实现学生信息管理系统(增、删、改、查)数据库/文件存储
根据学校对学生信息日常管理需要,学生信息管理系统包括以下功能: 登录系统: 新建学生信息:添加学生信息: 删除学生信息:对指定学生信息进行删除: 修改学生信息:对指定学生信息进行修改 查找学生信息:输 ...
- 盲沟低比?不不不,是芒果的笔,今天学一下分布式文件存储数据库MongoDB。
老样子先上图,上一篇NOSQL有大佬说要把首图的数据库全部学习了,今天特意只上了一张小图,一个就够了! 文章目录 前言 一.MongoDB 历史 二.MongoDB 支持语言 三.MongoDB 与关 ...
最新文章
- 创建mysql数据库,在新数据库中创建表,再尝试删除表
- Python练手小项目
- 表名含有后缀 mysql 怎么删除_mysql批量删除指定前缀或后缀表
- ASP.NET MVC中controller和view相互传值的方式
- win11怎么回退原系统 Windows11回退的步骤方法
- DotCMS安装步骤
- Egret入门学习日记 --- 第十二篇(书中 5.1节 内容)
- 读取视频并将视频转换成图片
- 如何防止短信API接口遍历
- html-5表白神器源码,html5开发表白神器实现代码
- 机器人改变生活利弊英语作文_机器人的危害英语作文
- PowerBI自动切换中英文单位
- (详细思路)利用py批量下载某站的视频
- Linux命令整理(二)
- 华为跑了?深圳终究留不住华为
- 如何在web端登录企业邮箱? 163企业邮箱怎么登陆?
- 前端框架MVC和MVVM的理解
- NewstartHA 配置技巧
- vue-json-excel 使用方法 导出excel 详解 以及实际操作 ,通俗易懂
- ImageNet调查报告