Mongodb GridFS图片文件存储解决方案

之前解决方案是接收图片数据后,将图片直接存储到盘阵,然后通过Apache做服务器,将图片信息存储到数据库,并且存储一个Apache的访问路径。

目前需要后台服务存储图片,将图片存储到MongoDB集群中,然后通过Nginx中的nginx-gridfs模块进行访问,在浏览器中通过url访问,效果与Apache访问本地文件一样。

本方案的内容比较基础,以后会有深入了解和优化,敬请期待!

一、安装MongoDB

(1)安装MongoDB

进入计划安装目录:cd  /usr/local/

下载mongodb-linux-x86_64-2.6.1.tgzhttps://fastdl.mongodb.org/linux/mongodb-linux-x86_64-2.6.1.tgz

解压:tar -zxf mongodb-linux-x86_64-2.6.1.tgz

改名:mv mongodb-linux-x86_64-2.6.1 mongodb2.6.1

创建数据目录和日志目录: mkdir -p mongodb2.6.1/mongodb_data/mongodb_db

mkdir -p mongodb2.6.1/mongodb_data/mongodb_logs

启动MongoDB: 进入MongoDB bin目录执行以下命令:

cd /usr/local/mongodb2.6.1/bin

./mongod --dbpath=/usr/local/mongodb2.6.1/mongodb_data/mongodb_db/ --logpath=/usr/local/mongodb2.6.1/mongodb_data/mongodb_log/mongodb.log --logappend &

检查启动状态:

ps -ef | grep mongo 看到刚才启动命令就说明在运行了

通过 netstat -ant | grep 27017 还能查看端口静态状态

1
2
3
4
5
6
7
8
9
10
[root@zjhl1 opt]# ps -ef | grep mongo
root     16350 10593  1 15:40 pts/1    00:01:11 ./mongod --dbpath=/opt/mongodb2.6.1/mongodb_data/mongodb_db/ --logpath=/opt/mongodb2.6.1/mongodb_data/mongodb_logs/mongodb.log --logappend
root     19027 10593  0 17:21 pts/1    00:00:00 grep mongo
[root@zjhl1 opt]# 
[root@zjhl1 opt]# netstat -ant | grep 27017
tcp        0      0 0.0.0.0:27017               0.0.0.0:*                   LISTEN      
tcp        0      0 127.0.0.1:27017             127.0.0.1:47686             ESTABLISHED 
tcp        0      0 127.0.0.1:47686             127.0.0.1:27017             ESTABLISHED 
tcp        0      0 192.168.1.111:27017         192.168.1.100:53462         ESTABLISHED 
[root@zjhl1 opt]#

(2)安装MongoVUE客户端

MongoVUE是类似oracle中PL/SQL Developer 或者MySql中SQLyog的图形化客户端。

目前是收费的,下载后Installer.msi后直接安装就行。至于授权问题自己百度解决。

此工具的功能很多,这里不展开讲,有需要的自己百度。

二、安装Nginx

(1)下载nginx-gridfs插件

网上有传出使用git安装此插件的,这个比较麻烦,我在文章的附件中留了下载包。本人测试可用。

下载后还要下载mongo的c语言驱动包,这个也可以在附件中下载。

下载完成后进行解压:tar -zxf nginx-gridfs.tar.gz

tar -zxf mongo-c-driver-0.94.2.tar.gz

解压完成后将驱动包内容全部拷贝到nginx-gridfs目录下的mongo-c-driver目录中:

mv mongo-c-driver-0.94.2/*  nginx-gridfs/mongo-c-driver/

如果有提示已经存在src目录,没有关系,忽略。然后就是下载Nginx,编译安装的过程了。

(6)下载Nginx1.0.1

Nginx版本太高对支持nginx-gridfs模块不是很成功,我是使用的Nginx1.7弄了一天都出不来图片。换成1.0.1就好了。对c不是很熟悉就没有深究。有那位大拿知道可以告诉我。

wget http://nginx.org/download/nginx-1.0.1.zip

解压:unzip nginx-1.0.1.zip

配置编译时设置:./configure --prefix=/usr/local/nginx --with-openssl=/usr/include/openssl --with-http_stub_status_module --add-module=/opt/nginx-gridfs

编译: make

安装:make install

配置mogon-gridfs地址:

在vim /usr/local/nginx/conf/nginx.conf配置文件中,增加下面的内容:

location /pics/ {
                gridfs pics     
                field=filename
                type=string;
                mongo 127.0.0.1:27017;
        }

gridfs:nginx识别插件的名字

pics:数据库名称

[root_collection]: 选择collection,如root_collection=blog, mongod就会去找blog.files与blog.chunks两个块,默认是fs

[field]:查询字段,保证mongdb里有这个字段名,支持_id, filename, 可省略, 默认是_id

[type]:解释field的数据类型,支持objectid, int, string, 可省略, 默认是int

[user]:用户名, 可省略

[pass]:密码, 可省略

mongo:mongodb url mongo名称 地址:端口

1
2
3
4
5
6
7
8
9
10
11
12
13
        #access_log  logs/host.access.log  main;
        location / {
            root   html;
            index  index.html index.htm;
        }
        location /pics/ {
                gridfs pics
                field=filename
                type=string;
                mongo 127.0.0.1:27017;
        }
        #error_page  404              /404.html;
        # redirect server error pages to the static page /50x.html

启动:/usr/local/nginx/sbin/nginx &

查看日志:tail -f /usr/local/nginx/logs/error.log

检查: 在浏览器输入: http://192.168.1.111/

当你看到下面的字母就说明nginx启动成功了。

Welcome to nginx!

三、测试开发

测试例子使用java开发,代码在附件中

(1)图片写入

全部的例子在附件中,GridFSTest.rar,例子还需要mongodb的驱动jar包mongo-java-driver-2.9.3.jar 。

1
2
3
4
5
6
7
8
                try {
   Mongo mongo = new Mongo("192.168.100.52"27017);// 创建连接
   DB db = mongo.getDB("pics"); // 选择数据库
   byte[] files = createImage(800600"800 X 600"); // 创建图片
   save(files, "test3.jpg", db); // 存储图片
  catch (Exception e) {
   e.printStackTrace();
  }

(2)文件获取

通过代码获取图片就不写了。只写如何在程序中传递文件路径,然后在前端展示。

存储图片信息时,可以加上ip地址:http://192.168.100.52/pics/test3.jpg ,然后前端应用通过给定的URL地址就可以获取图片内容了。

在浏览器中输入地址可以获得相同的效果。

mongodb gridfs基本使用的更多相关文章

  1. CentOS6.3搭建Nginx代理访问MongoDB GridFS图片资源

    PHP可以直接读取MongoDB GridFS中的图片并显示到页面中,但对PHP的压力就大了.偶然机会,了解到Nginx可以代理访问,实现过程如下: 1.工具准备 安装一些必要的编译工具及库,这里是直 ...

  2. MongoDB的学习和使用(MongoDB GridFS)

    MongoDB GridFS GridFS 用于存储和恢复那些超过16M(BSON文件限制)的文件(如:图片.音频.视频等). GridFS 也是文件存储的一种方式,但是它是存储在MonoDB的集合中 ...

  3. MongoDB GridFS 存储大文件

    我们经常会遇到这样的场景:上传/下载文件. 有两种思路可以解决这个问题: (1)将文件存储在服务器的文件系统中: (2)将文件存储在数据库中. 如果我们选择(2),那么我们可以使用MongoDB Gr ...

  4. MongoDB GridFS 存储文件

    使用MongoDB的GridFS方式. CSDN: https://blog.csdn.net/qq_32657967/article/details/81534259官方文档: https://do ...

  5. MongoDb GridFS的使用

    MongoDb GridFS 是MongoDB的文件存储方案,主要用于存储和恢复那些超过16M(BSON文件限制)的文件(如:图片.音频等),对大文件有着更好的性能. 要在C#中使用GridFS,首先 ...

  6. MongoDB GridFS最佳应用概述

    <MongoDB GridFS最佳应用概述> 作者:chszs,转载需注明.博客主页:http://blog.csdn.net/chszs GridFS是MongoDB数据库之上的一个简单 ...

  7. MongoDB GridFS——本质上是将一个文件分割为大小为256KB的chunks 每个chunk里会放md5标识 取文件的时候会将这些chunks合并为一个整体返回

    MongoDB GridFS GridFS 用于存储和恢复那些超过16M(BSON文件限制)的文件(如:图片.音频.视频等). GridFS 也是文件存储的一种方式,但是它是存储在MonoDB的集合中 ...

  8. Spring Boot使用MongoDB GridFS进行文件的操作

    1. GridFS简介 GridFS 用于存储和恢复那些超过16M(BSON文件限制)的文件(如:图片.音频.视频等),但是它是存储在MonoDB的集合中. GridFS 会将文件对象分割成多个的ch ...

  9. 【荐】PHP操作MongoDB GridFS 存储文件,如图片文件

    GridFS是MongoDB的一个内置功能,它提供一组文件操作的API以利用MongoDB存储文件,GridFS的基本原理是将文件保存在两个Collection中,一个保存文件索引,一个保存文件内容, ...

随机推荐

  1. ZooKeeper简述

    一.简介 ZooKeeper是一个高性能,分布式的,开源分布式应用协调服务.它提供了简单原始的功能,分布式应用可以基于它实现更高级的服务,比如同步,集群管理,命名空间,配置维护等.ZooKeeper使 ...

  2. Docker命令之 run

    docker run :创建一个新的容器并运行一个命令 语法 docker run [OPTIONS] IMAGE [COMMAND] [ARG...] OPTIONS说明: -a stdin: 指定 ...

  3. 解决iredmail下postfix发送邮件时报错[need fully-qualified hostname]

    iredmail配置好后,尝试从一客户端的OE中发送邮件,结果报错,在mail主机中查看tail /var/log/maillog,发现如下错误信息: Oct :: mail2 postfix/smt ...

  4. 【Jupyter notebook】access remotly

    http://jupyter-notebook.readthedocs.io/en/latest/public_server.html

  5. js实现图片粘贴上传到服务器并展示

    最近看了一些有关于js实现图片粘贴上传的demo,实现如下: (这里只能检测到截图粘贴和图片右键复制之后粘贴) demo1: document.addEventListener('paste', fu ...

  6. Java常用数据结构之Set之TreeSet

    前言 上篇文章我们分析了HashSet,它是基于HashMap实现的,那TreeSet会是怎么实现的呢?没错!和大家想的一样,它是基于TreeMap实现的.所以,TreeSet的源码也很简单,主要还是 ...

  7. CStringArray error C2248: 'CObject::CObject' : cannot access private member declared in class

    在开发中将一个字符串分割,并将子字符串保存在CStringArray中,专门写了一个函数,如下: SplitStringToCString(CString str, TCHAR tszSplit, C ...

  8. JVM垃圾回收机制之引用类型

    一:引用的类型 javac编译器编译源文件后,生成字节码文件,在类加载器加载字节码文件到内存中时,在内存中开辟 空间,栈.堆以及方法区,来存放对象以及引用.引用可以分为四种: 强引用:平常我们在编写程 ...

  9. 【Windows socket+IP+UDP+TCP】网络基础

    Windows Socket+网络      Winsock是 Windows下套接字标准.          Winsock 编程分为UDP[Windows socket + UDP],TCP[Wi ...

  10. 大杂烩 -- Iterator 和 Iterable 区别和联系

    基础大杂烩 -- 目录 用Iterator模式实现遍历集合  Iterator模式是用于遍历集合类的标准访问方法.它可以把访问逻辑从不同类型的集合类中抽象出来,从而避免向客户端暴露集合的内部结构. 例 ...