分享

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

xioaxu790 发表于 2014-8-24 20:53:39 [显示全部楼层] 回帖奖励 阅读模式 关闭右栏 0 28204
问题导读
1、MongoDB如何存储图片?
2、Mongodb集群和Nginx中的nginx-gridfs模块是什么关系?
3、主要使用什么来开发?






    之前解决方案是接收图片数据后,将图片直接存储到盘阵,然后通过Apache做服务器,将图片信息存储到数据库,并且存储一个Apache的访问路径。
    目前需要后台服务存储图片,将图片存储到MongoDB集群中,然后通过Nginx中的nginx-gridfs模块进行访问,在浏览器中通过url访问,效果与Apache访问本地文件一样。
     本方案的内容比较基础,以后会有深入了解和优化,敬请期待!

一、安装MongoDB
    (1)安装MongoDB
      进入计划安装目录:cd  /usr/local/
     下载mongodb-linux-x86_64-2.6.1.tgz  https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-2.6.1.tgz
      解压:
  1. tar -zxf mongodb-linux-x86_64-2.6.1.tgz
复制代码


      改名:
  1. mv mongodb-linux-x86_64-2.6.1 mongodb2.6.1
复制代码


      创建数据目录和日志目录:
  1. mkdir -p mongodb2.6.1/mongodb_data/mongodb_db
  2. mkdir -p mongodb2.6.1/mongodb_data/mongodb_logs
复制代码


     启动MongoDB: 进入MongoDB bin目录执行以下命令:
  1.       cd /usr/local/mongodb2.6.1/bin
  2.       ./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. [root@zjhl1 opt]# ps -ef | grep mongo
  2. 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
  3. root     19027 10593  0 17:21 pts/1    00:00:00 grep mongo
  4. [root@zjhl1 opt]#
  5. [root@zjhl1 opt]# netstat -ant | grep 27017
  6. tcp        0      0 0.0.0.0:27017               0.0.0.0:*                   LISTEN      
  7. tcp        0      0 127.0.0.1:27017             127.0.0.1:47686             ESTABLISHED
  8. tcp        0      0 127.0.0.1:47686             127.0.0.1:27017             ESTABLISHED
  9. tcp        0      0 192.168.1.111:27017         192.168.1.100:53462         ESTABLISHED
复制代码

(2)安装MongoVUE客户端
      MongoVUE是类似oracle中PL/SQL Developer 或者MySql中SQLyog的图形化客户端。
      目前是收费的,下载后Installer.msi后直接安装就行。至于授权问题自己百度解决。
      此工具的功能很多,这里不展开讲,有需要的自己百度。


二、安装Nginx
   (1)下载nginx-gridfs插件
      网上有传出使用git安装此插件的,这个比较麻烦,我在文章的附件中留了下载包。本人测试可用。
      下载后还要下载mongo的c语言驱动包,这个也可以在附件中下载。
      下载完成后进行解压:
  1. tar -zxf nginx-gridfs.tar.gz
  2. 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
      配置编译时设置:
  1. ./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配置文件中,增加下面的内容:
  1.         location /pics/ {
  2.                 gridfs pics     
  3.                 field=filename
  4.                 type=string;
  5.                 mongo 127.0.0.1:27017;
  6.         }
复制代码


     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.      #access_log  logs/host.access.log  main;
  2.         location / {
  3.             root   html;
  4.             index  index.html index.htm;
  5.         }
  6.         location /pics/ {
  7.                 gridfs pics
  8.                 field=filename
  9.                 type=string;
  10.                 mongo 127.0.0.1:27017;
  11.         }
  12.         #error_page  404              /404.html;
  13.         # 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.                 try {
  2.    Mongo mongo = new Mongo("192.168.100.52", 27017);// 创建连接
  3.    DB db = mongo.getDB("pics"); // 选择数据库
  4.    byte[] files = createImage(800, 600, "800 X 600"); // 创建图片
  5.    save(files, "test3.jpg", db); // 存储图片
  6.   } catch (Exception e) {
  7.     e.printStackTrace();
  8.   }
复制代码


(2)文件获取
        通过代码获取图片就不写了。只写如何在程序中传递文件路径,然后在前端展示。
       存储图片信息时,可以加上ip地址: ,然后前端应用通过给定的URL地址就可以获取图片内容了。
       在浏览器中输入地址可以获得相同的效果。

没找到任何评论,期待你打破沉寂

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条