zoukankan      html  css  js  c++  java
  • mongodb Gridfs操作

    GridFS 介绍

    GridFS是MongoDB规范用于存储和检索大文件,如图片,音频文件,视频文件等。这是一种文件系统用来存储文件,但数据存储于MongoDB集合中。GridFS存储文件比其文档大小16MB限制的更大能力。

    GridFS的划分一个文件分成块存储数据每个块在一个单独的文件,每个最大尺寸255K。

    GridFS默认使用两个集合 fs.files 和 fs.chunks 存储该文件的元数据和块。每组块标识其唯一的_id ObjectID字段。fs.files切断作为父文件。 fs.chunks 文档 files_id 字段链接块到其父文件。

    以下是fs.files集合的样本文件:

    {
       "filename": "test.txt",
       "chunkSize": NumberInt(261120),
       "uploadDate": ISODate("2014-04-13T11:32:33.557Z"),
       "md5": "7b762939321e146569b07f72c62cca4f",
       "length": NumberInt(646)
    }

    文件指定的文件名,块大小,上传日期,和长度。

    以下是 fs.chunks 文件的样本文件:

    {
       "files_id": ObjectId("534a75d19f54bfec8a2fe44b"),
       "n": NumberInt(0),
       "data": "Mongo Binary Data"
    }

    将文件添加到GridFS:

    现在,我们将使用GridFS的put命令存储MP3文件。 为此,我们将使用存在于MongoDB的安装文件夹下的bin文件夹的mongofiles.exe工具。

    打开命令提示符,导航到MongoDB的安装文件夹下的bin文件夹中的mongofiles.exe,并键入下面的代码:

    >mongofiles.exe -d gridfs put song.mp3

    这里,gridfs上在文件存储在数据库的数据库名称。 如果数据库不存在,MongoDB会自动动态创建一个新文档。 Song.mp3的是上载的文件的名称。要查看数据库文件的文件,你可以使用查询找到:

    >db.fs.files.find()

    上面的命令返回以下文档:

    {
       _id: ObjectId('534a811bf8b4aa4d33fdf94d'), 
       filename: "song.mp3", 
       chunkSize: 261120, 
       uploadDate: new Date(1397391643474), md5: "e4f53379c909f7bed2e9d631e15c1c41",
       length: 10401959 
    }

    我们也可以看到在fs.chunks集合涉及使用下面的代码保存的文件都存在于块中,使用以前的查询返回文档ID:

    >db.fs.chunks.find({files_id:ObjectId('534a811bf8b4aa4d33fdf94d')})

    在我的示例中,该查询返回40个文档,是整个MP3文件划分成的40块数据。

    前言

    GridFS是一种将大型文件存储在MongoDB的文件规范:

    数据库支持以BSON格式保存二进制对象。 但是MongoDB中BSON对象最大不能超过4MB。

    GridFS 规范提供了一种透明的机制,可以将一个大文件分割成为多个较小的文档。

    为实现这点,该规范指定了一个将文件分块的标准。每个文件都将在文件集合对象中保存一个元数据对象,一个或多个块对象可被组合保存在一个块集合中。

    上传文件

    • Shell

            mongofiles put xxx.txt

            常用参数如下:

            -d 指定数据库 

            -u –p 指定用户名,密码

            -h 指定主机

            -port 指定主机端口

            -r 如果存在同名文件则在put成功后删除其他同名文件

            通过这样的命令就可以把文件上传到fs集合中。

    • Java

            //获取db

            MongoClient mClient = new MongoClient("10.211.55.8");

            db = mClient.getDB("test");

            //得到Gridfs对象

            GridFS fs = new GridFS(db);

            //访问要上传的文件

            File file = new File("/Users/luoaz/05testDir/files/test1.txt");

            //执行保持

            GridFSInputFile gfFile = fs.createFile(file);

            gfFile.save();

    下载文件

    • Shell

            mongofiles get xxx.txt

            常用参数如下:

            -d 指定数据库 

            -u –p 指定用户名,密码

            -h 指定主机

            -port 指定主机端口

            -l 下载到本地的文件名,默认和数据库中的名字一致

            通过这样的命令就可以把文件从fs集合中下载到本地。

    • Java

            Java 下载的重点是怎么获取到文件流,获取到文件流后就跟普通的保持文件到本地一样了。

              //获取db

            MongoClient mClient = new MongoClient("10.211.55.8");

            db = mClient.getDB("test");

            //得到Gridfs对象

            GridFS fs = new GridFS(db);

            

            //要下载到的文件路径

            File file = new File("/Users/files/down_test1.txt");

            FileOutputStream os = new FileOutputStream(file);

                            

            //获得文件流

            InputStream is = fs.findOne(new BasicDBObject("filename","test1.txt")).getInputStream();

                            

            //下载

            byte[] bytes = new byte[1024];

            while(is.read(bytes)>0){

                    os.write(bytes);

            }

            os.flush();

            os.close();

    删除文件

    • Shell

            mongofiles delete xxx.txt

            删除指定名称的文件,如果存在同名文件则都删除

            常用参数如下:

            -d 指定数据库 

            -u –p 指定用户名,密码

            -h 指定主机

            -port 指定主机端口

    • Java

            //获取db

            MongoClient mClient = new MongoClient("10.211.55.8");

            db = mClient.getDB("test");

            //得到Gridfs对象

            GridFS fs = new GridFS(db);

                            

            //删除指定文件名称的文件

            fs.remove("test1.txt");

    查看文件

    • Shell

            1、list 

                    显示所有文件

                    mongofiles list xx.txt

                    显示所有的指定文件名的文件

            2、search

                    搜索指定名称的文件,可以模糊搜索

                    mongofiles list xx.txt

                    mongofiles list .txt

    • Java

            这个就跟MongoDB的find用法一样了

    /*//保存文件
    GridFSFile file = myFS.createFile(new File("D:/aa.png"));
    file.save(); */

    //输出文件
    GridFSDBFile file1 =myFS.findOne("aa.png");
    file1.writeTo(new File("D:/image1.png"));

    //删除文件
    /*GridFSDBFile file =myFS.findOne("image1.jpg");
    myFS.remove((ObjectId) file2.getId());*/

  • 相关阅读:
    English,The Da Vinci Code, Chapter 23
    python,meatobject
    English,The Da Vinci Code, Chapter 22
    English,The Da Vinci Code, Chapter 21
    English,The Da Vinci Code, Chapter 20
    English,The Da Vinci Code, Chapter 19
    python,xml,ELement Tree
    English,The Da Vinci Code, Chapter 18
    English,The Da Vinci Code, Chapter 17
    English,The Da Vinci Code, Chapter 16
  • 原文地址:https://www.cnblogs.com/wangjing666/p/6844598.html
Copyright © 2011-2022 走看看