文档章节

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

紫萱格主
 紫萱格主
发布于 2015/05/12 11:22
字数 1153
阅读 90
收藏 1

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

    之前解决方案是接收图片数据后,将图片直接存储到盘阵,然后通过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

      解压: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 还能查看端口静态状态

[root@admin 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@admin opt]# 
[root@admin 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@admin 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名称 地址:端口

 #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 。

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

(2)文件获取

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

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

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


本文转载自:http://www.open-open.com/lib/view/open1403346683262.html

共有 人打赏支持
紫萱格主
粉丝 2
博文 42
码字总数 36233
作品 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图片文件存储解决方案

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

一枚Sir
2014/06/19
0
0
mongoDB--GridFS简介

前言 :GridFS从名字来看,就明白是一个文件系统,它是mongodb的一个子模块,使用GridFS可以基于mongodb来持久存储文件.并且支持分布式应用(文件分布存储和读取). 使用场景:如果你的系统有如下情...

索隆
2013/04/15
0
1
mongoDB 之 GridFS简介(一)

前言 :GridFS从名字来看,就明白是一个文件系统,它是mongodb的一个子模块,使用GridFS可以基于mongodb来持久存储文件.并且支持分布式应用(文件分布存储和读取). 使用场景:如果你的系统有如下情...

一枚Sir
2014/06/19
0
0
MongoDB系列教程(八):GridFS存储详解

MongoDB系列教程(八):GridFS存储详解 GridFS简介 mongoDB的文档以BSON格式存储,支持二进制的数据类型,当我们把二进制格式的数据直接保存到mongoDB的文档中。但是当文件太大时,例如图片...

开元中国2015
2015/07/25
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Ubuntu18.04 显卡GF-940MX安装NVIDIA-390.77

解决办法: 下面就给大家一个正确的姿势在Ubuntu上安装Nvidia驱动: (a)首先去N卡官网下载自己显卡对应的驱动:www.geforce.cn/drivers (b)下载后好放在英文路径的目录下,怎么简单怎么来...

AI_SKI
今天
3
0
深夜胡思乱想

魔兽世界 最近魔兽世界出了新版本, 周末两天升到了满级,比之前的版本体验好很多,做任务不用抢怪了,不用组队打怪也是共享拾取的。技能简化了很多,哪个亮按哪个。 运维 服务器 产品 之间的...

Firxiao
今天
1
0
MySQL 8 在 Windows 下安装及使用

MySQL 8 带来了全新的体验,比如支持 NoSQL、JSON 等,拥有比 MySQL 5.7 两倍以上的性能提升。本文讲解如何在 Windows 下安装 MySQL 8,以及基本的 MySQL 用法。 下载 下载地址 https://dev....

waylau
今天
0
0
微信第三方平台 access_token is invalid or not latest

微信第三方开发平台code换session_key说的特别容易,但是我一使用就带来无穷无尽的烦恼,搞了一整天也无济于事. 现在记录一下解决问题的过程,方便后来人参考. 我遇到的这个问题搜索了整个网络也...

自由的开源
今天
3
0
openJDK之sun.misc.Unsafe类CAS底层实现

注:这篇文章参考了https://www.cnblogs.com/snowater/p/8303698.html 1.sun.misc.Unsafe中CAS方法 在sun.misc.Unsafe中CAS方法如下: compareAndSwapObject(java.lang.Object arg0, long a......

汉斯-冯-拉特
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部