mongodb gridfs基本使用
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 mongoroot 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 --logappendroot 19027 10593 0 17:21 pts/1 00:00:00 grep mongo[root@zjhl1 opt]# [root@zjhl1 opt]# netstat -ant | grep 27017tcp 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(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地址就可以获取图片内容了。
在浏览器中输入地址可以获得相同的效果。
mongodb gridfs基本使用的更多相关文章
- CentOS6.3搭建Nginx代理访问MongoDB GridFS图片资源
PHP可以直接读取MongoDB GridFS中的图片并显示到页面中,但对PHP的压力就大了.偶然机会,了解到Nginx可以代理访问,实现过程如下: 1.工具准备 安装一些必要的编译工具及库,这里是直 ...
- MongoDB的学习和使用(MongoDB GridFS)
MongoDB GridFS GridFS 用于存储和恢复那些超过16M(BSON文件限制)的文件(如:图片.音频.视频等). GridFS 也是文件存储的一种方式,但是它是存储在MonoDB的集合中 ...
- MongoDB GridFS 存储大文件
我们经常会遇到这样的场景:上传/下载文件. 有两种思路可以解决这个问题: (1)将文件存储在服务器的文件系统中: (2)将文件存储在数据库中. 如果我们选择(2),那么我们可以使用MongoDB Gr ...
- MongoDB GridFS 存储文件
使用MongoDB的GridFS方式. CSDN: https://blog.csdn.net/qq_32657967/article/details/81534259官方文档: https://do ...
- MongoDb GridFS的使用
MongoDb GridFS 是MongoDB的文件存储方案,主要用于存储和恢复那些超过16M(BSON文件限制)的文件(如:图片.音频等),对大文件有着更好的性能. 要在C#中使用GridFS,首先 ...
- MongoDB GridFS最佳应用概述
<MongoDB GridFS最佳应用概述> 作者:chszs,转载需注明.博客主页:http://blog.csdn.net/chszs GridFS是MongoDB数据库之上的一个简单 ...
- MongoDB GridFS——本质上是将一个文件分割为大小为256KB的chunks 每个chunk里会放md5标识 取文件的时候会将这些chunks合并为一个整体返回
MongoDB GridFS GridFS 用于存储和恢复那些超过16M(BSON文件限制)的文件(如:图片.音频.视频等). GridFS 也是文件存储的一种方式,但是它是存储在MonoDB的集合中 ...
- Spring Boot使用MongoDB GridFS进行文件的操作
1. GridFS简介 GridFS 用于存储和恢复那些超过16M(BSON文件限制)的文件(如:图片.音频.视频等),但是它是存储在MonoDB的集合中. GridFS 会将文件对象分割成多个的ch ...
- 【荐】PHP操作MongoDB GridFS 存储文件,如图片文件
GridFS是MongoDB的一个内置功能,它提供一组文件操作的API以利用MongoDB存储文件,GridFS的基本原理是将文件保存在两个Collection中,一个保存文件索引,一个保存文件内容, ...
随机推荐
- Maven最佳实践-distributionManagement
分发构件至远程仓库 mvn install 会将项目生成的构件安装到本地Maven仓库,mvn deploy 用来将项目生成的构件分发到远程Maven仓库.本地Maven仓库的构件只能供当前用户使用, ...
- EJB部署规则报错
javax.naming.NameNotFoundException: Unable to resolve 'RuleDeployer'. Resolved ''; remaining name 'R ...
- ngx-bootstrap学习笔记(一)-popover
前言 这月做了个ng2模块,其中有个校验功能,当校验不通过时给出提示,项目中使用jQuery实现,今天才发现ngx-bootstrap已经有现成功能了,且可封装成通用组件放入shareModule,使 ...
- js url?callback=xxx xxx的介绍
由于安全的原因,浏览器做了很多方面的工作,由此也就引入了一系列的跨域问题,需要注意的是: 跨域并非浏览器限制了发起跨站请求,而是跨站请求可以正常发起,但是返回结果被浏览器拦截了.最好的例子是 CSRF ...
- [转]调试AngularJS应用
原文链接:Debugging AngularJS Apps from the Console 当我们开发AngularJS应用的时候,我们想在Chrome/FF/IE控制台调试隐藏在应用中的数据和服务 ...
- 你可能不知道UED和UCD
我们都知道UI是User Interface,即它的本意是用户界面,从字面上看是用户和界面组成,实际上还包括用户与界面之间的交互关系.UI最初对大家来说只是一个名词,它代表一些界面.当然重点还是是UI ...
- android EditText设置弹出数字输入法键盘
<EditText android:id="@+id/edit_digit_input" android:layout_width="wrap_ ...
- [Unity3D]关于NaN(Not a Number)的问题
在游戏运行时,代码若写得不安全很容易出现NAN的异常.一旦NAN出现整个游戏不崩溃也坏死掉了,游戏上了则是要被直接打回来的节奏,更是一个开发及测试人员每人都要扣3000块的大BUG. 一般表现为: ...
- Ubuntu下制作窗口
在Ubuntu下安装 sudo apt-get install dialog 类型 用于创建 类型的选项 含义 复选框 --checklist 允许用户显示一个选项列表, 每个选项都可以被单独选择 信 ...
- BarTender条码检验位类型知识讲解
检验位类型指定BarTender使用哪一种算法来计算符号的附加检验位.使用“BarTender检验位类型”选项可以从您的符号所支持的检验位类型中选择一种检验位类型.下面,小编就给大家分享设置检验位类型 ...