mongodb里面自带有一个分布式文件系统gridFs,它是以块的方式来存储文件的,一般的存储都够用了,国内一个使用例子是视觉中国使用它来进行上亿数据级的图片存储,可以看出这套文件系统还是挺强大的。下面介绍下如何用spring-data-mongodb来对其进行操作,其实spring-data-mongodb并没有对gridfs进行再次封装,我们只能自己根据需要简单封装下接口,mongodb java api中操作gridfs也是很简单的,1.得到DB对象,2.new 一个GridFSInputFile对象,这个对象相当于一个文件记录,包含文件和与这个文件相关的信息。3.调用save方法保存。读取文件时可以根据文件名和id来对文件进行查询,查询出来一个GridFSDBFile 对象,再把这个对象输出到流或文件中。
先注入MongoDbFactory
1 2 |
@Autowired private MongoDbFactory mongoDbFactory; |
获得DB对象
1 |
DB db = mongoDbFactory.getDb(); |
保存文件(其中FS_NAME相当于gridfs文件系统的表名,可以有多个)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
public boolean saveFile(File file, String fileName, String contentType, DBObject metaData) { GridFSInputFile gfsInput; try { gfsInput = new GridFS(db, FS_NAME).createFile(file); gfsInput.setFilename(fileName); gfsInput.setContentType(contentType); gfsInput.setMetaData(metaData); gfsInput.save(); } catch (IOException e) { log.error(e, e); return false; } return true; } |
通过文件名读取文件
1 2 3 4 5 6 7 8 9 10 |
public GridFSDBFile findFileByName(String fileName){ GridFSDBFile gfsFile ; try { gfsFile = new GridFS(db, FS_NAME).findOne(fileName); } catch (Exception e) { log.error(e, e); return null; } return gfsFile; } |
通过id读取文件
1 2 3 4 5 6 7 8 9 10 |
public GridFSDBFile findFileById(String id){ GridFSDBFile gfsFile ; try { gfsFile = new GridFS(db, FS_NAME).find(new ObjectId(id)); } catch (Exception e) { log.error(e, e); return null; } return gfsFile; } |
输出文件到OutputStream
1 2 3 4 5 6 7 8 9 |
private boolean writeToOutputStream(OutputStream out, GridFSDBFile gfsFile) { try { gfsFile.writeTo(out); } catch (IOException e) { log.error(e, e); return false; } return true; } |
相关推荐
在MongoDB中,单个文档的最大大小通常为16MB,但通过GridFS,可以将大文件分割成多个小块进行存储,方便管理和检索。 GridFS主要由两个集合组成:`fs.files`和`fs.chunks`。`fs.files`集合用来存储文件的元数据,如...
以下是对"Mongo 文件上传"这一主题的详细阐述。 首先,我们需要了解MongoDB的GridFS存储机制。GridFS是MongoDB提供的一个用于存储和检索大型文件的标准,如图片、视频或文档。它将文件分割成多个块(chunks),每个...
- 文件存储:MongoDB不直接支持文件存储,通常采用GridFS规范,将大文件拆分为多个小块(chunks)存储在两个不同的集合中:`fs.files`和`fs.chunks`。 2. **Spring Boot集成MongoDB**: - 添加依赖:在`build....
"mongo数据.zip" 文件很可能是包含MongoDB数据库备份或导出的数据文件,方便用户在不同环境中恢复或迁移数据。 MongoDB 的核心特性包括: 1. **分布式数据存储**:MongoDB 支持分布式部署,可以在多台服务器上构建...
2. **下载**:可以从GridFS中读取文件,并提供给用户下载,或者在服务器端处理后再返回。 3. **查询**:可以基于文档的其他字段查询大文件,方便组合查询。 4. **更新与删除**:可以更新文件元数据,或者根据需要...
本次讨论的是MongoDB中的限定集(Capped Collections)和大文件存储(GridFS)两个特色功能。 首先,限定集是MongoDB中一种特殊的集合类型,它有一个固定大小的存储空间,当数据存储超过这个空间限制时,新插入的...
7. **GridFS**:对于大文件存储,MongoDB提供了一个名为GridFS的规范,可以将大文件分割成小块存储,方便管理和检索。 8. **易于开发**:由于其文档模型和强大的查询能力,MongoDB对开发人员友好,尤其适合处理半...
7. **GridFS支持**:MongoDB Java驱动程序也提供了对GridFS的支持,这是一个用于存储和检索大文件的分布式文件系统,适合存储超过16MB的单个文档。 8. **监控和日志记录**:可以配置监听器以跟踪数据库操作的事件,...
6. **GridFS**:对于大型文件存储,MongoDB提供了GridFS,将大文件分割为多个小块存储。 7. **C++实现**:MongoDB主要用C++编写,这使得它能够运行在多种平台上,并保持高性能。 8. **WiredTiger存储引擎**:...
8. GridFS:MongoDB的GridFS规范用于存储和检索大型文件,如图片或视频。Java驱动程序提供了`GridFSBucket`和`GridFSFile`接口来处理这种存储需求。 9. 异步操作:从2.12版开始,MongoDB Java驱动程序引入了异步...
2. **高性能**:MongoDB支持内存映射文件系统,这意味着数据可以快速地在磁盘和内存之间移动,提高了读写性能。此外,它还支持多线程操作,进一步提升了处理能力。 3. **自动分片(Sharding)**:在2.0版本中,...
5. GridFS:MongoDB使用GridFS来存储大文件,将文件拆分为多个小文档,解决单个BSON文档大小限制问题,便于管理和检索。 6. 数据文件大:预分配空间策略防止文件碎片,提高写入效率。 7. 更新迁移中的块:更新会...
7. GridFS:MongoDB 提供了一个名为GridFS的文件存储系统,用于存储和检索大型文件,如图片、视频等。 在RHEL 7.0上安装MongoDB 5.0.1的步骤通常包括以下部分: 1. 解压压缩包:首先,你需要使用`tar`命令解压缩...
- ** GridFS **: 一个用于存储和检索大型文件(超过16MB单个文档大小限制)的规范,将大文件分割为多个小块存储在MongoDB中。 使用这两个JAR文件,开发者可以构建与MongoDB 3.0.2兼容的Java应用程序,享受MongoDB...
- **目的**: GridFS是MongoDB用于存储大型文件(如图片、音频和视频文件)的标准机制。 - **实现**: 文件被拆分成小块存储在多个文档中。 #### 35. GridFS的解释 - **机制**: GridFS是一种文件存储规范,允许...
4. **mongofiles.exe**: 这是 MongoDB 的对象存储管理工具,用于与 GridFS 存储引擎交互,允许用户查看、上传和下载大文件。 5. **mongotop.exe**: 类似于 mongostat,mongotop 提供了数据库中各个集合的读写操作的...
4. **文件系统MongoDB的GridFS**:对于大文件的存储,MongoDB提供了一个名为GridFS的文件系统,它可以将大型文件分割成多个小块,存储在不同的文档中,便于管理和检索。 5. **2.2.2版本特点**:此版本是MongoDB的一...