`

Java Maven项目中使用MongoDB GridFS上传音频图片

阅读更多
一、文件系统

 

先简单的介绍一下文件系统和分布式文件系统

1、文件系统:是操作系统用来存取文件的,计算机通过文件系统存放数据。大部分均基于磁盘存储,典型的文件系统包括unix 的UFS,NTFS是window NT的文件存储系统。传统文件系统主要面临的问题就是磁盘容量不够时,需要扩容才可继续进行文件存储,如同咱电脑内存不够加块内存条。

2、分布式文件存储系统:同传统的纵向扩容不同,分布式文件存储系统通过存储文件节点,各节点通信形成文件系统网络,各节点通过网络进行数据传输。就像原来密集的数据信息通过一张节点织网,分布式文件系统负责对节点进行存储,数据文件可存储于其他存储系统中。

二、GridFS 文件系统

 GridFS是分布式文件存储系统的典型代表。为MongoDB提供的数据存储解决方案,专门供大数据文件存储使用,主要用于存储视频、音频、图片,GridFS主要适用于文件数量较大的文件存储。

GridFS并非mongodb的特有,不过是mongo选择使用这样一种文件存储解决方案进行存储自己的数据。用户上传的数据存储于mongo的集合中,【mongoDB的集合类似于关系数据库的表】

 

三、Java中使用mongo GridFS进行数据操作

介绍了GridFS的原理,下面以上传、下载本地PDF文件为例,演示如何在java maven项目中使用mongo进行数据操作。

1、整体流程

使用GridFS,首先调用客户端驱动程序提供的GFS API【如java中引入mongojar包】来将数据块进行分割,准备上传,如果是下载则利用API进行数据合并,保存到mongo集合中。

 

2、代码演示

 (1)首先新建maven项目

 (2)在mongoDB官网下载mongo驱动jar包,

         下载地址如下:https://docs.mongodb.org/ecosystem/drivers/ 

         点击MongoDB Java Driver,将驱动坐标拷贝到maven pom文件中。

 

 

[html] view plain copy
 
  1. <dependencies>  
  2.     <dependency>  
  3.         <groupId>org.mongodb</groupId>  
  4.         <artifactId>mongodb-driver</artifactId>  
  5.         <version>3.2.0</version>  
  6.     </dependency>  
  7. </dependencies>  

 

 

 

 (3)创建数据库连接、文件上传下载操作

 

[java] view plain copy
 
  1. public class GridFSDemo {  
  2.     public static void main(String[] args) throws FileNotFoundException  
  3.     {  
  4.         /* 
  5.          * 1、创建数据库连接 
  6.          */  
  7.         Mongo client= new Mongo("192.168.22.246",27017);  
  8.         //取得数据库对象  
  9.         DB db=client.getDB("mongoTest");  
  10.           
  11.         String collectionName="mongoCollectionTest";  
  12.         //创建数据库对象中GridFS集合  
  13.         GridFS gridFS= new GridFS(db,collectionName);         
  14.           
  15.         /* 
  16.          * 2、上传文件 
  17.          */  
  18.         //创建测试文件,mongo 默认存在该文件  
  19.         File file=new File("F:/Java/疯狂JAVA讲义.pdf");  
  20.         FileInputStream fileInputStream=new FileInputStream(file);  
  21.           
  22.         //创建gridFS文件数据流  
  23.         GridFSInputFile createFile=gridFS.createFile(fileInputStream);  
  24.           
  25.         //设置文件属性  
  26.         createFile.put("filename""123Test.pdf");  
  27.         createFile.put("contentType""application/pdf");  
  28.         createFile.save();  
  29.           
  30.           
  31.         /* 
  32.          * 3、根据id查询上传文件 
  33.          */  
  34.         GridFSDBFile findOne= gridFS.findOne(new BasicDBObject("_id",createFile.getId()));  
  35.         System.out.print(findOne);  
  36.           
  37.         /* 
  38.          * 4、查询所有文件列表 
  39.          * DBCursor 数据库游标 
  40.          */  
  41.         DBCursor fileList=gridFS.getFileList();  
  42.         while(fileList.hasNext())  
  43.         {  
  44.             System.out.print(fileList.next());  
  45.         }  
  46.           
  47.         /* 
  48.          *5、 删除文件 
  49.          */  
  50.         gridFS.remove(new  BasicDBObject("_id",createFile.getId()));  
  51.         client.close();  
  52.     }  

 

 

 

 (4)程序效果展示

如图,在mongDB中新建名为【mongoTest】的数据库和【mongoCollectionTest】集合,将【123Test.pdf】上传到该集合中。

四、项目应用

在ITOO项目中tool模块也封装了使用GridFS对mongoDB进行操作的底层方法,主要同【三】中的代码流程一致,通过创建数据库连接,建立数据库、集合,获取本地文件路径,创建文件输入流通过save方法将文件上传到数据库中。同样也有通过id查询、遍历查询所有文件列表、删除等方法。

 

[java] view plain copy
 
  1. /** 
  2.      * @MethodName  : getMongo 
  3.      * @Description : 获取数据连接 
  4.      * @return 返回mongon 
  5.      */  
  6.     private Mongo getMongo(){  
  7.         Mongo mongo=null;  
  8.         try {  
  9.             mongo = new Mongo("192.168.22.246",27017);  
  10.               
  11.         } catch (Exception e) {  
  12.             e.printStackTrace();  
  13.         }  
  14.         return mongo;  
  15.     }  
  16.       
  17.     /** 
  18.      *  @MethodName : uploadFile 
  19.      * @Description : 上传文件 
  20.      * @param file :文件,File类型 
  21.      * @param id    :唯一标示文件,可根据id查询到文件.必须设置 
  22.      * @param dbName :库名,每个系统使用一个库 
  23.      * @param collectionName:集合名,如果传入的集合名库中没有,则会自动新建并保存 
  24.      * @param map:放入你想要保存的属性,例如文件类型(“congtentType”".jpg"),字符串类型,区分大小写,如果属性没有的话会自动创建并保存 
  25.      */  
  26.    public void uploadFile(File file ,String id,String dbName,String collectionName,LinkedHashMap<String, Object> map){  
  27.        //把mongoDB的数据库地址配置在外部。  
  28.         try {  
  29.             Mongo mongo =getMongo();   
  30.             //每个系统用一个库  
  31.             DB db= mongo.getDB(dbName);  
  32.             System.out.println(db.toString());  
  33.             //每个库中可以分子集  
  34.             GridFS gridFS= new GridFS(db,collectionName);  
  35.               
  36.             // 创建gridfsfile文件  
  37.             GridFSFile gridFSFile = gridFS.createFile(file);  
  38.             //判断是否已经存在文件,如果存在则先删除  
  39.             GridFSDBFile gridFSDBFile=getFileById(id, dbName, collectionName);  
  40.             if(gridFSDBFile!=null){  
  41.                 deleteFile(id, dbName, collectionName);  
  42.             }  
  43.             //将文件属性设置到  
  44.             gridFSFile.put("_id", id);  
  45.             //循环设置的参数  
  46.             if (map != null && map.size() > 0) {  
  47.                 for (String key : map.keySet()) {  
  48.                     gridFSFile.put(key, map.get(key));  
  49.                 }  
  50.             }  
  51.             //保存上传  
  52.             gridFSFile.save();  
  53.         } catch (Exception e) {  
  54.             e.printStackTrace();  
  55.         }  
  56.     }  
  57.      
  58.    /**   
  59.     * @MethodName   : deleteFile 
  60.     * @Description  : 删除文件 
  61.     * @param id:文件对应的id 
  62.     * @param dbName:文件所在的库 
  63.     * @param collectionName:文件所在的集合 
  64.     */  
  65.    public void deleteFile(String id,String dbName,String collectionName){  
  66.   
  67.         try {  
  68.             //获得mongoDB数据库连接。  
  69.             Mongo mongo =getMongo();   
  70.             //获得库  
  71.             DB db= mongo.getDB(dbName);  
  72.             //获得子集  
  73.             GridFS gridFS= new GridFS(db,collectionName);  
  74.             //删除文件  
  75.             DBObject query=new BasicDBObject("_id", id);  
  76.             gridFS.remove(query);  
  77.         } catch (Exception e) {  
  78.             e.printStackTrace();  
  79.         }  
  80.    }  
  81.      
  82.    /** 
  83.     * 批量删除文件 
  84.     * @MethodName   : deleteFileByIds 
  85.     * @Description  : TODO 
  86.     * @param ids 
  87.     * @param dbName 
  88.     * @param collectionName 
  89.     *  
  90.     */  
  91.    public void deleteFileByIds(String[] ids,String dbName,String collectionName){  
  92.        try {  
  93.            //获得mongoDB数据库连接。  
  94.            Mongo mongo =getMongo();   
  95.            //获得库  
  96.            DB db= mongo.getDB(dbName);  
  97.            //获得子集  
  98.            GridFS gridFS= new GridFS(db,collectionName);  
  99.            Map<String,String> map = new HashMap<String,String>();  
  100.            for(int i=0;i<ids.length;i++){  
  101.              //删除文件  
  102.                DBObject query=new BasicDBObject("_id", ids[i]);  
  103.                gridFS.remove(query);  
  104.            }           
  105.        } catch (Exception e) {  
  106.            e.printStackTrace();  
  107.        }  
  108.   }  
  109.      
  110.    /** 
  111.     * @MethodName   : getFileById 
  112.     * @Description  : 根据Id获得文件 
  113.     * @param id :文件Id 
  114.     * @param dbName: 数据库名 
  115.     * @param collectionName:集合名 
  116.     * @return GridFSDBFile 
  117.     */  
  118.    public GridFSDBFile getFileById(String id,String dbName,String collectionName){  
  119.        GridFSDBFile gridFSDBFile=null;  
  120.        try {  
  121.             //获得mongoDB数据库连接。  
  122.             Mongo mongo =getMongo();   
  123.             //获得库  
  124.             DB db= mongo.getDB(dbName);  
  125.             //获得子集  
  126.             GridFS gridFS= new GridFS(db,collectionName);  
  127.             //获得文件  
  128.             DBObject query=new BasicDBObject("_id", id);  
  129.             gridFSDBFile=gridFS.findOne(query);  
  130.         } catch (Exception e) {  
  131.             e.printStackTrace();  
  132.         }  
  133.        //返回数据  
  134.        return gridFSDBFile;  
  135.    }  
  136.      
  137.    /**查询集合中所有文件 
  138.     * @MethodName   : getAllFile 
  139.     * @Description  : TODO 
  140.     * @param dbName 
  141.     * @param collectionName    * 
  142.     * @return 
  143.     */  
  144.    public List<GridFSDBFile> getAllFile(String dbName,String collectionName){  
  145.        List<GridFSDBFile> gridFSDBFileList=null;  
  146.        try {  
  147.             //获得mongoDB数据库连接。  
  148.             Mongo mongo =getMongo();   
  149.             //获得库  
  150.             DB db= mongo.getDB(dbName);  
  151.             //获得子集  
  152.             GridFS gridFS= new GridFS(db,collectionName);  
  153.             //获得文件  
  154.             DBObject query=new BasicDBObject();//空的构造  
  155.             gridFSDBFileList = gridFS.find(query);  
  156.         } catch (Exception e) {  
  157.             e.printStackTrace();  
  158.         }  
  159.        //返回数据  
  160.        return gridFSDBFileList;  
  161.    }  

通过对GridFS结合java file类,实现了对各音频、视频、图片等数据在mongoDB上的存储,不可否认的是,作为NoSQL数据库mongoDB利用其自身独到之处被众多大型视频网站项目所青睐,GridFS便是其点睛之笔。

 

http://blog.csdn.net/daybreak1209/article/details/50471262

分享到:
评论

相关推荐

    Mongodb + GridFS +Java 操作Mongodb中存储的文件

    目前,Java驱动通常使用的是MongoDB Java Driver,可以在Maven仓库中找到对应的依赖,例如: ```xml &lt;groupId&gt;org.mongodb &lt;artifactId&gt;mongodb-driver-sync &lt;version&gt;4.3.0 ``` 接下来,我们需要配置MongoDB...

    使用java上传MP4文件至mongodb数据库,并下载 源代码

    在Java项目中,你需要连接到MongoDB实例。创建一个`MongoClient`实例,指定服务器地址和端口,然后选择数据库: ```java MongoClients.create("mongodb://localhost:27017") MongoDatabase database = client.get...

    mongodb+GridFS文件的上传下载删除DEMO

    在这个"mongodb+GridFS文件的上传下载删除DEMO"项目中,我们将学习如何使用 Java 驱动程序操作 MongoDB 的 GridFS 功能。首先,我们需要确保已经安装了 MongoDB 数据库并配置好环境。Java 开发者可以使用 MongoDB ...

    使用java上传MP4文件至mongodb数据库,并下载

    使用Java上传MP4文件至MongoDB数据库,并下载 本文将详细介绍如何使用Java上传MP4文件至MongoDB数据库,并下载。首先,我们需要创建一个Maven项目,并配置pom.xml文件,引入MongoDB相关的依赖和单元测试的依赖。...

    mongodb 所需jar包及gridfs java示例代码

    在本主题中,我们将深入探讨MongoDB的Java开发所需jar包以及如何使用GridFS进行文件存储。 首先,MongoDB的Java驱动程序通常包含以下核心jar包: 1. `mongodb-driver.jar`:这是与MongoDB服务器通信的基础库,包含...

    MongoDBjava各版本驱动下载

    在Java中使用MongoDB,首先需要安装并配置对应的驱动版本,以确保与正在运行的MongoDB服务器兼容。 1. MongoDB驱动介绍: MongoDB提供了多种语言的驱动程序,Java驱动是其中之一。它基于Java 6及更高版本,实现了...

    mongodb java driver 2.11

    在实际开发中,使用MongoDB Java Driver 2.11时,首先需要在项目中添加对应的依赖,例如在Maven项目中,可以在pom.xml文件中加入如下配置: ```xml &lt;groupId&gt;org.mongodb &lt;artifactId&gt;mongo-java-driver ...

    java 连接mongodb的操作

    在实际项目中,你可能需要处理更复杂的情况,如错误处理、连接池管理、使用GridFS存储大文件等。不过,了解这些基础操作后,你可以轻松地扩展到更高级的功能。在开发过程中,记得查阅MongoDB Java驱动的官方文档,它...

    springboot 操作mongdb(包含GridFs存储文件) #资源达人分享计划#

    在本教程中,我们将深入探讨如何使用Spring Boot与MongoDB集成,特别关注使用GridFS进行文件存储。Spring Boot简化了Java应用的初始化和配置,而MongoDB作为一个文档型数据库,提供了非关系数据的灵活存储。GridFS是...

    使用 Spring Data for JPA、MongoDB、Neo4j、Redis 的示例.zip

    Spring Data 博客系列此项目包含我关于 Spring Data 项目的博客文章系列的 Java 源代码示例Spring Data MongoDB 中的 GridFS 支持第六部分Spring Data Redis第 5 部分Spring Data Neo4j第 4 部分使用 Spring Data ...

    生成Mongodb缓存

    在本示例中,我们将探讨如何将SuperMap的地图缓存集成到MongoDB数据库中,以便于其他客户端共享和使用这些地图数据。 首先,我们需要了解SuperMap的MapCache机制。MapCache是SuperMap提供的一种地图切片服务,它...

    MongoDB的Java访问实现(包括文件存储)

    在Maven项目中,可以在pom.xml文件中添加以下依赖: ```xml &lt;groupId&gt;org.mongodb &lt;artifactId&gt;mongodb-driver-sync &lt;version&gt;4.3.0 ``` 接着,我们需要创建一个MongoClient实例来连接MongoDB服务器。这可以...

    Java mongodb CRUD 操作代码

    在本文中,我们将深入探讨如何使用Java进行MongoDB的基本CRUD操作,以及如何处理图片的存储、读取和删除。MongoDB是一个流行的NoSQL数据库,它以JSON格式存储数据,而Java是与其交互的常用编程语言。让我们开始探索...

    mongodb需要的jar

    在实际开发中,引入`mongodb.jar`后,开发者需要在项目配置中添加对这个库的依赖,通常是通过Maven或Gradle这样的构建工具完成。然后,就可以编写Java代码来实现与MongoDB的交互,例如: ```java MongoClient ...

    mongodb Java驱动包

    在使用这个压缩包时,确保正确导入对应的依赖,例如,如果你使用Maven,可以在pom.xml文件中添加相关依赖。然后,根据你的需求,通过上述方法进行数据库的连接和操作,从而高效地利用MongoDB的强大功能。同时,查阅...

    MongoDB驱动包mongo-java-driver-2.10.1

    4. GridFS:MongoDB的文件存储系统,`GridFS`接口允许开发者以文件形式存储大数据,提供了文件上传、下载、查找和删除等操作。 5. 高级功能:如事务支持(自MongoDB 4.0开始)、聚合框架、地理空间索引等。 使用`...

    mongodb_java

    下面将详细介绍如何在Java中使用MongoDB及其相关概念。 首先,要开始使用MongoDB Java驱动程序,你需要将其添加到项目的依赖管理中。如果你使用Maven,可以在`pom.xml`文件中添加以下依赖: ```xml &lt;groupId&gt;org...

    Spring Data MongoDB中文文档

    - **Spring Data MongoDB** 的安装非常简单,可以通过 Maven 或 Gradle 添加依赖来完成。 ```xml &lt;groupId&gt;org.springframework.data &lt;artifactId&gt;spring-data-mongodb &lt;version&gt;1.10.6.RELEASE ``` - 配置...

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

    10. **线程安全**:MongoDB Java驱动程序是线程安全的,可以放心在多线程环境中使用。 在实际开发中,你可以通过Maven或Gradle将`mongo-java-driver-3.5.0.jar`添加为项目依赖,然后利用其提供的API轻松地进行数据...

    mongo-java-driver-3.0.2.zip

    在本例中,我们讨论的是`mongo-java-driver-3.0.2.zip`这个压缩包,它包含了`mongo-java-driver-3.0.2.jar`文件,这是Java项目中使用MongoDB驱动时所需的核心库。 **MongoDB Java驱动3.0.2版的主要特点:** 1. **...

Global site tag (gtag.js) - Google Analytics