为什么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支持相关推荐

  1. 后端输出流文件时,浏览器不保存文件,不弹下载框

    实践得知:通过ajax请求后端时,浏览器不会保存文件.因为ajax不支持返回二进制流. 我用的是axios也不行 解决方法: //导出xxx(){console.log(this.data2)Vue. ...

  2. python gridfs_【已解决】用Python去连接本地mongoDB去用GridFS保存文件

    折腾: 期间,命令行方式的mongofiles去put get delete delete_id等,已经基本上搞清楚了. 接着就是去用Python代码,通过driver: 的方式,调用API,去保存数 ...

  3. java mongodb gridfs_MongoDB-4 GridFS 文件存储

    1. 配置config spring: data: mongodb: uri: mongodb://username:password@192.168.2.72:27017 database: myd ...

  4. MongoDB:GridFS删除方法删除存储桶中的所有文件

    不久前,我们遇到了MongoDB GridFS的奇怪行为,这使我为MongoDB Java驱动程序创建了一个故障 单 . 今天,我在浏览器书签中找到了指向故障单的链接. 该票证目前尚未解决,因此我认为 ...

  5. Spring Boot 中使用 MongoDB 增删改查

    本文快速入门,MongoDB 结合SpringBoot starter-data-mongodb 进行增删改查 1.什么是MongoDB ? MongoDB 是由C++语言编写的,是一个基于分布式文件 ...

  6. Spring EclipseLink NoSQL - 使用MongoDB和Oracle NoSQL DB构建

    Spring EclipseLink NoSQL - 使用MongoDB和Oracle NoSQL DB构建 我们已经探索了如何实现EclipseLink JPA和众所周知的关系数据库(如MySQL) ...

  7. MongoDB(四)——GridFS

    GridFS MongoDB的一个重要子模块,可基于MongoDB来持久存储文件,并且支持分布式存储和读取. 持久存储:对应瞬时数据如内存,指保存到数据库中,能持久保存. 分布式存储:将数据分散地存储 ...

  8. Spring Boot中使用MongoDB数据库

    MongoDB简介 MongoDB是一个基于分布式文件存储的数据库,它是一个介于关系数据库和非关系数据库之间的产品,其主要目标是在键/值存储方式(提供了高性能和高度伸缩性)和传统的RDBMS系统(具有 ...

  9. Spring系列之集成MongoDB的2种方法,你知道嘛?

    Spring系列之集成MongoDB的2种方法,你知道嘛? MongoDB是最流行的NoSQL数据库,SpringBoot是使用Spring的最佳实践.今天带大家讲一讲SpringBoot集成Mong ...

最新文章

  1. Java并发编程71道面试题及答案
  2. 华为鸿蒙新概念机,华为P50概念机确认,麒麟芯片+鸿蒙系统,这才是真旗舰!...
  3. 跨链(5)“蚂蚁区块链”之跨链系统框架
  4. 鬼泣4计算机丢失xinput,Win7系统运行游戏报错“计算机丢失XINPUT1-3.dll”
  5. 深度学习算法简要综述(下)
  6. vue组件 Prop传递数据
  7. Python教你迅速成为蚂蚁森林排行榜第一名
  8. 【项目相关】MVC中将WebUploader进行封装
  9. pandas dataframe column_数据处理的瑞士军刀pandas | 火星技术帖
  10. 悬赏任务发布平台系统源码|威客任务网站源码PHP开源版
  11. SpringBoot项目中使用CXF发布和调用webservice接口
  12. java 吃豆豆游戏背景底纹_java swing开发简单的大鱼吃豆子小游戏,可用于毕业设计(附详细设计文档)...
  13. python安装插件很慢_Sublime text3+python3配置及插件安装
  14. 【NLP】模型压缩与蒸馏!BERT的忒修斯船
  15. 剑指offer题目记录
  16. 无业务不技术:那些誓用区块链重塑的行业,发展怎么样了?
  17. linux系统中shell脚本最全详解二shell条件判断语法介绍函数分析
  18. 【点击链接,自动下载安装APP,小米公司的坑】在浏览器中, 我们以为回退就能解决误点击。其实是不管用的。
  19. 老调重弹——你存储的密码做Hash了吗?
  20. Android近期错误

热门文章

  1. android addView的使用
  2. EditView设置边框
  3. 【android】3.0以后系统给广播默认加上FLAG_EXCLUDE_STOPPED_PACKAGES标记
  4. Android BaseAdapter与ListView的使用
  5. 关键字—final static const的区别
  6. (一)git简介及安装
  7. python 全局变量引用与修改
  8. 一个循环、一个变量打印乘法口诀
  9. 应急模拟系统功能结构图
  10. 通过URL传参数,然后第二个页面需要获取参数