Spring保存文件到MongoDB之GridFS支持
为什么80%的码农都做不了架构师?>>>
问题
Spring上传来的文件,怎么保存到MongoDB中去类,这里暂时不考虑其他方案来保存文件,如文件系统,FTP等等之类的。假设,已经配好Spring,实现文件上传,获取到MultipartFile对象,如果没有完成,请参考这两篇文章:《MongoDB在spring中xml传统配置》和《Spring中formdata方式提交json对象和file之二(改进版)》。
步骤
- 配置Spring支持GridFS
- 通过GridFsOperations保存
配置Spring支持GridFS
配置转换器
<mongo:mapping-converter id="converter" />
配置GridFsTemplate
<bean class="org.springframework.data.mongodb.gridfs.GridFsTemplate"><constructor-arg ref="mongoDbFactory" /><constructor-arg ref="converter" />
</bean>
spring-web.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:mongo="http://www.springframework.org/schema/data/mongo"xsi:schemaLocation="http://www.springframework.org/schema/data/mongohttp://www.springframework.org/schema/data/mongo/spring-mongo.xsdhttp://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsd"><mongo:mongo-client id="mongoClient" host="localhost" port="27017"/><mongo:db-factory id="mongoDbFactory" mongo-ref="mongoClient"/><mongo:mapping-converter id="converter" /><bean class="org.springframework.data.mongodb.gridfs.GridFsTemplate"><constructor-arg ref="mongoDbFactory" /><constructor-arg ref="converter" /></bean></beans>
通过GridFsOperations保存
注解GridFsOperations
@Autowired
GridFsOperations operations;
使用GridFsOperations
for (MultipartFile multipartFile : multipartFileList) {try {ObjectId objectId = operations.store(multipartFile.getInputStream(), multipartFile.getOriginalFilename());} catch (IOException e) {e.printStackTrace();}
}
Controller
@Autowired
GridFsOperations operations;
...
for (MultipartFile multipartFile : multipartFileList) {try {ObjectId objectId = operations.store(multipartFile.getInputStream(), multipartFile.getOriginalFilename());} catch (IOException e) {e.printStackTrace();}
}
...
**Note:**保存文件到MongoDB成功后,会获得ObjectId对象,需要将这个对象记住,以便于以后从MongoDB中再次查询改文件;保存失败会抛出异常,也是需要关注的。
感受
如果单位有统一的文件系统,还是保存到专门的文件系统比较好,如果需要把数据都集中放在MongoDB中,且文件数据不怎么变动也是可以的。如果通过文件需要更新,就需要通过GridFsOperations先保存文件到MongoDB中成功后,在考虑更新ObjectId,并且删除原来的ObjectId对应在MongoDB中的文件。
参考: GridFS in Spring Data MongoDB Spring Data MongoDB - Reference Documentation GridFsOperations ObjectId
转载于:https://my.oschina.net/fxtxz2/blog/1828909
Spring保存文件到MongoDB之GridFS支持相关推荐
- 后端输出流文件时,浏览器不保存文件,不弹下载框
实践得知:通过ajax请求后端时,浏览器不会保存文件.因为ajax不支持返回二进制流. 我用的是axios也不行 解决方法: //导出xxx(){console.log(this.data2)Vue. ...
- python gridfs_【已解决】用Python去连接本地mongoDB去用GridFS保存文件
折腾: 期间,命令行方式的mongofiles去put get delete delete_id等,已经基本上搞清楚了. 接着就是去用Python代码,通过driver: 的方式,调用API,去保存数 ...
- java mongodb gridfs_MongoDB-4 GridFS 文件存储
1. 配置config spring: data: mongodb: uri: mongodb://username:password@192.168.2.72:27017 database: myd ...
- MongoDB:GridFS删除方法删除存储桶中的所有文件
不久前,我们遇到了MongoDB GridFS的奇怪行为,这使我为MongoDB Java驱动程序创建了一个故障 单 . 今天,我在浏览器书签中找到了指向故障单的链接. 该票证目前尚未解决,因此我认为 ...
- Spring Boot 中使用 MongoDB 增删改查
本文快速入门,MongoDB 结合SpringBoot starter-data-mongodb 进行增删改查 1.什么是MongoDB ? MongoDB 是由C++语言编写的,是一个基于分布式文件 ...
- Spring EclipseLink NoSQL - 使用MongoDB和Oracle NoSQL DB构建
Spring EclipseLink NoSQL - 使用MongoDB和Oracle NoSQL DB构建 我们已经探索了如何实现EclipseLink JPA和众所周知的关系数据库(如MySQL) ...
- MongoDB(四)——GridFS
GridFS MongoDB的一个重要子模块,可基于MongoDB来持久存储文件,并且支持分布式存储和读取. 持久存储:对应瞬时数据如内存,指保存到数据库中,能持久保存. 分布式存储:将数据分散地存储 ...
- Spring Boot中使用MongoDB数据库
MongoDB简介 MongoDB是一个基于分布式文件存储的数据库,它是一个介于关系数据库和非关系数据库之间的产品,其主要目标是在键/值存储方式(提供了高性能和高度伸缩性)和传统的RDBMS系统(具有 ...
- Spring系列之集成MongoDB的2种方法,你知道嘛?
Spring系列之集成MongoDB的2种方法,你知道嘛? MongoDB是最流行的NoSQL数据库,SpringBoot是使用Spring的最佳实践.今天带大家讲一讲SpringBoot集成Mong ...
最新文章
- Java并发编程71道面试题及答案
- 华为鸿蒙新概念机,华为P50概念机确认,麒麟芯片+鸿蒙系统,这才是真旗舰!...
- 跨链(5)“蚂蚁区块链”之跨链系统框架
- 鬼泣4计算机丢失xinput,Win7系统运行游戏报错“计算机丢失XINPUT1-3.dll”
- 深度学习算法简要综述(下)
- vue组件 Prop传递数据
- Python教你迅速成为蚂蚁森林排行榜第一名
- 【项目相关】MVC中将WebUploader进行封装
- pandas dataframe column_数据处理的瑞士军刀pandas | 火星技术帖
- 悬赏任务发布平台系统源码|威客任务网站源码PHP开源版
- SpringBoot项目中使用CXF发布和调用webservice接口
- java 吃豆豆游戏背景底纹_java swing开发简单的大鱼吃豆子小游戏,可用于毕业设计(附详细设计文档)...
- python安装插件很慢_Sublime text3+python3配置及插件安装
- 【NLP】模型压缩与蒸馏!BERT的忒修斯船
- 剑指offer题目记录
- 无业务不技术:那些誓用区块链重塑的行业,发展怎么样了?
- linux系统中shell脚本最全详解二shell条件判断语法介绍函数分析
- 【点击链接,自动下载安装APP,小米公司的坑】在浏览器中, 我们以为回退就能解决误点击。其实是不管用的。
- 老调重弹——你存储的密码做Hash了吗?
- Android近期错误