• MongoDB基于GridFS管理文件


    前言

    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用法一样了

    备注

            文件操作主要依赖com.mongodb.gridfs 下的几个类,参考网址

            http://api.mongodb.org/java/3.0/com/mongodb/gridfs/GridFS.html

  • 相关阅读:
    Android框架之高速开发框架xUtil
    树状数组 LA 4329 亚洲赛北京赛区题
    Linq To Sql 增改删
    标题栏显示进度条
    android:inputType参数类型说明
    Illegal resource reference: @*android resources are private and not always present
    android:editable is deprecated: Use an <EditText> to make it editable
    android:contentDescription的作用是什么
    Replace
    图片缓存优化
  • 原文地址:https://www.cnblogs.com/luoaz/p/4727595.html
Copyright © 2020-2023  润新知