文档章节

mongodb Gridfs操作

Airship
 Airship
发布于 03/15 17:55
字数 1262
阅读 20
收藏 0

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());*/ 

分类: mongodb

标签: mongodb

本文转载自:https://www.cnblogs.com/wangjing666/p/6844598.html

Airship
粉丝 44
博文 994
码字总数 20464
作品 0
南京
高级程序员
私信 提问
Java MongoDB : Save image example

Java MongoDB : Save image example In this tutorial, we show you how to save an image file into MongoDB, via GridFS API. The GridFS APIs are able to serve other binary files as w......

引鸩怼孑
2015/05/22
0
0
基于GridFS+NGinx构建分布式文件系统 之实战(三)

基于GridFS构建分布式文件系统 首先看看什么是GridFS: GridFS is a mechanism for storing large binary files in MongoDB. There are several reasons why you might consider using GridF......

一枚Sir
2014/06/20
0
1
浅尝辄止MongoDB:GridFS

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wzy0623/article/details/82894835 一、为什么使用GridFS GridFS是MongoDB的一个子模块,使用GridFS可以基于M...

wzy0623
2018/09/29
0
0
MongoDB进阶系列(13)——GridFS大文件的添加、获取、查看、删除

GridFS是一种在MongoDB中存储大二进制文件的机制,使用GridFS的原因有以下几种: 存储巨大的文件,比如视频、高清图片等。 利用GridFS可以简化需求。 GridFS会直接利用已经建立的复制或分片机...

HappyBKs
2015/03/17
0
0
Spring从MongoDB中下载文件之GridFS

问题 之前提到过以GridFS方式上传问题到MongoDB中:Spring保存文件到MongoDB之GridFS支持。现在需要从Mongodb中读取文件,应该怎么处理类? 解决 Maven 注解mongoDbFactory 获取文件流 Note...

亚林瓜子
2018/06/12
0
0

没有更多内容

加载失败,请刷新页面

加载更多

lua web快速开发指南(7) - 高效的接口调用 - httpc库

httpc库基于cf框架都内部实现的socket编写的http client库. httpc库内置SSL支持, 在不使用代理的情况下就可以请求第三方接口. httpc支持header、args、body、timeout请求设置, 完美支持各种h...

水果糖的小铺子
46分钟前
3
0
通过四道常问面试题,带你了解什么是数据库分库分表

编者语:为了避免被误解为:「手里有把锤子,看什么都是钉子!」,说明一下不是什么业务都适合分布式数据库,更不是用了分布式数据库性能就一定能得到扩展。 其次:本文为纯干货,建议先转发...

老道士
今天
5
0
springmvc 整体流程

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR......

architect刘源源
今天
3
0
磁盘管理

先来看两个查看的命令 查看磁盘使用情况df 用法:df, df -h, df -m, df -k 查看目录或文件大小 用法:du -sh, du -sm, du -s(默认以k为单位) 新加一块盘如何操作 步骤:分区(可选)--> 格...

wzb88
今天
3
0
在 Linux 下确认 NTP 是否同步的方法

NTP 意即网络时间协议Network Time Protocol,它通过网络同步计算机系统之间的时钟。NTP 服务器可以使组织中的所有服务器保持同步,以准确时间执行基于时间的作业。NTP 客户端会将其时钟与 ...

Linux就该这么学
今天
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部