Mongodb GridFS圖片文件存儲解決方案

 Mongodb GridFS圖片文件存儲解決方案html

    以前解決方案是接收圖片數據後,將圖片直接存儲到盤陣,而後經過Apache作服務器,將圖片信息存儲到數據庫,而且存儲一個Apache的訪問路徑。前端

    目前須要後臺服務存儲圖片,將圖片存儲到MongoDB集羣中,而後經過Nginx中的nginx-gridfs模塊進行訪問,在瀏覽器中經過url訪問,效果與Apache訪問本地文件同樣。java

     本方案的內容比較基礎,之後會有深刻了解和優化,敬請期待!linux

1、安裝MongoDBnginx

    (1)安裝MongoDBgit

      進入計劃安裝目錄:cd  /usr/local/ web

     下載mongodb-linux-x86_64-2.6.1.tgz  https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-2.6.1.tgzmongodb

      解壓:tar -zxf mongodb-linux-x86_64-2.6.1.tgz數據庫

      更名:mv mongodb-linux-x86_64-2.6.1 mongodb2.6.1vim

      建立數據目錄和日誌目錄: 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@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後直接安裝就行。至於受權問題本身百度解決。

      此工具的功能不少,這裏不展開講,有須要的本身百度。

    

      

 

2、安裝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!

 

3、測試開發

      測試例子使用java開發,代碼在附件中

    (1)圖片寫入

     所有的例子在附件中,GridFSTest.rar,例子還須要mongodb的驅動jar包mongo-java-driver-2.9.3.jar 

                try {
   Mongo mongo = new Mongo("192.168.100.52", 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.52/pics/test3.jpg ,而後前端應用經過給定的URL地址就能夠獲取圖片內容了。

       在瀏覽器中輸入地址能夠得到相同的效果。

相關文章
相關標籤/搜索