`
k1121
  • 浏览: 179084 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

读写mongo GridFs中的文件

 
阅读更多

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;
  }

 

 

分享到:
评论

相关推荐

    mongdb+GridFS文件上传

    在MongoDB中,单个文档的最大大小通常为16MB,但通过GridFS,可以将大文件分割成多个小块进行存储,方便管理和检索。 GridFS主要由两个集合组成:`fs.files`和`fs.chunks`。`fs.files`集合用来存储文件的元数据,如...

    Mongo 文件上传

    以下是对"Mongo 文件上传"这一主题的详细阐述。 首先,我们需要了解MongoDB的GridFS存储机制。GridFS是MongoDB提供的一个用于存储和检索大型文件的标准,如图片、视频或文档。它将文件分割成多个块(chunks),每个...

    基于 MongoDB 及 Spring Boot 的文件服务器的实现

    - 文件存储:MongoDB不直接支持文件存储,通常采用GridFS规范,将大文件拆分为多个小块(chunks)存储在两个不同的集合中:`fs.files`和`fs.chunks`。 2. **Spring Boot集成MongoDB**: - 添加依赖:在`build....

    mongo数据.zip

    "mongo数据.zip" 文件很可能是包含MongoDB数据库备份或导出的数据文件,方便用户在不同环境中恢复或迁移数据。 MongoDB 的核心特性包括: 1. **分布式数据存储**:MongoDB 支持分布式部署,可以在多台服务器上构建...

    前端开源库-mongoose-gridstore

    2. **下载**:可以从GridFS中读取文件,并提供给用户下载,或者在服务器端处理后再返回。 3. **查询**:可以基于文档的其他字段查询大文件,方便组合查询。 4. **更新与删除**:可以更新文件元数据,或者根据需要...

    30分钟学MongoDB系列——限定集与大文件存储篇

    本次讨论的是MongoDB中的限定集(Capped Collections)和大文件存储(GridFS)两个特色功能。 首先,限定集是MongoDB中一种特殊的集合类型,它有一个固定大小的存储空间,当数据存储超过这个空间限制时,新插入的...

    resfult for mongo db

    7. **GridFS**:对于大文件存储,MongoDB提供了一个名为GridFS的规范,可以将大文件分割成小块存储,方便管理和检索。 8. **易于开发**:由于其文档模型和强大的查询能力,MongoDB对开发人员友好,尤其适合处理半...

    mongo-java-driver-3.5.0.jar版本驱动包

    7. **GridFS支持**:MongoDB Java驱动程序也提供了对GridFS的支持,这是一个用于存储和检索大文件的分布式文件系统,适合存储超过16MB的单个文档。 8. **监控和日志记录**:可以配置监听器以跟踪数据库操作的事件,...

    mongo-master.zip

    6. **GridFS**:对于大型文件存储,MongoDB提供了GridFS,将大文件分割为多个小块存储。 7. **C++实现**:MongoDB主要用C++编写,这使得它能够运行在多种平台上,并保持高性能。 8. **WiredTiger存储引擎**:...

    mongo-java-driver-2.13.2.zip

    8. GridFS:MongoDB的GridFS规范用于存储和检索大型文件,如图片或视频。Java驱动程序提供了`GridFSBucket`和`GridFSFile`接口来处理这种存储需求。 9. 异步操作:从2.12版开始,MongoDB Java驱动程序引入了异步...

    MongoDB -win32-i386-2.0.0.zip

    2. **高性能**:MongoDB支持内存映射文件系统,这意味着数据可以快速地在磁盘和内存之间移动,提高了读写性能。此外,它还支持多线程操作,进一步提升了处理能力。 3. **自动分片(Sharding)**:在2.0版本中,...

    MongoDB常见18道面试题及答案.docx

    5. GridFS:MongoDB使用GridFS来存储大文件,将文件拆分为多个小文档,解决单个BSON文档大小限制问题,便于管理和检索。 6. 数据文件大:预分配空间策略防止文件碎片,提高写入效率。 7. 更新迁移中的块:更新会...

    mongodb-linux-x86_64-rhel70-5.0.1.tgz

    7. GridFS:MongoDB 提供了一个名为GridFS的文件存储系统,用于存储和检索大型文件,如图片、视频等。 在RHEL 7.0上安装MongoDB 5.0.1的步骤通常包括以下部分: 1. 解压压缩包:首先,你需要使用`tar`命令解压缩...

    mogodb-3.0.2 jar包及源码

    - ** GridFS **: 一个用于存储和检索大型文件(超过16MB单个文档大小限制)的规范,将大文件分割为多个小块存储在MongoDB中。 使用这两个JAR文件,开发者可以构建与MongoDB 3.0.2兼容的Java应用程序,享受MongoDB...

    MongoDB面试锦集

    - **目的**: GridFS是MongoDB用于存储大型文件(如图片、音频和视频文件)的标准机制。 - **实现**: 文件被拆分成小块存储在多个文档中。 #### 35. GridFS的解释 - **机制**: GridFS是一种文件存储规范,允许...

    MongoDB win32 版本1

    4. **mongofiles.exe**: 这是 MongoDB 的对象存储管理工具,用于与 GridFS 存储引擎交互,允许用户查看、上传和下载大文件。 5. **mongotop.exe**: 类似于 mongostat,mongotop 提供了数据库中各个集合的读写操作的...

    mongodb-win32-i386-2.2.2.zip

    4. **文件系统MongoDB的GridFS**:对于大文件的存储,MongoDB提供了一个名为GridFS的文件系统,它可以将大型文件分割成多个小块,存储在不同的文档中,便于管理和检索。 5. **2.2.2版本特点**:此版本是MongoDB的一...

    MongoDB3.6.5免安装版

    6. **GridFS**:MongoDB内置的文件存储系统,用于存储和检索大型文件,如图像、视频等,将大文件分割成多个小块存储,便于高效访问。 7. **索引**:MongoDB支持多种类型的索引,如单键索引、复合索引、地理空间索引...

Global site tag (gtag.js) - Google Analytics