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.tgzshell
更名: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后直接安装就行。至于受权问题本身百度解决。
此工具的功能不少,这里不展开讲,有须要的本身百度。
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启动成功了。
3、测试开发
测试例子使用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地址就能够获取图片内容了。
在浏览器中输入地址能够得到相同的效果。