GridFS是MongoDB中的一个内置功能,利用这一模块,可以实现使用MongoDB存储文件,并且支持分布式应用(文件分布存储和读取)。一、GridFS测试MongoDB提供了一个命令行工具mongofiles。保存文件#echotest1.txt#./mongofilesput1.txtconnectedto:12
GridFS是MongoDB中的一个内置功能,利用这一模块,可以实现使用MongoDB存储文件,并且支持分布式应用(文件分布存储和读取)。
一、GridFS测试
MongoDB提供了一个命令行工具mongofiles。
保存文件
# echo "test" >1.txt
# ./mongofiles put 1.txt
connected to: 127.0.0.1
added file: { _id: ObjectId('504d5baa867ba4bf176a297b'), filename:
"1.txt", chunkSize: 262144, uploadDate: new Date(1347247018446),
md5: "d8e8fca2dc0f896fd7cb4cb0031ba249", length: 5 }
done!
获取文件
# ./mongofiles get 1.txt
connected to: 127.0.0.1
done write to: 1.txt
显示文件列表
# ./mongofiles list
connected to: 127.0.0.1
1.txt 5
查找文件
# ./mongofiles search 1.*
connected to: 127.0.0.1
1.txt 5
# ./mongofiles list 1.*
connected to: 127.0.0.1
1.txt 5
默认上传到test数据库,gridfs默认会创建collection:fs.files和fs.chunks,前者是文件信息构成,后者是文件的内容,两者通过_id与files_id建立关联。
你也可以连到
mongodb控制台中,通过下面命令查询信息
db.fs.files.find()
{ "_id" : ObjectId("504d5baa867ba4bf176a297b"), "filename" :
"1.txt", "chunkSize" : 262144, "uploadDate" :
ISODate("2012-09-10T03:16:58.446Z"), "md5" :
"d8e8fca2dc0f896fd7cb4cb0031ba249", "length" : 5 }
上传图片到指定的test2库中,下面2个语句都可以。
./mongofiles put 2.jpg -h localhost -db test2 -t jpg
./mongofiles put 2.jpg -h localhost -db test2 -t "image/jpg"
connected to: localhost
added file: { _id: ObjectId('504d9cdf6480eee6c296e120'), filename:
"2.jpg", chunkSize: 262144, uploadDate: new Date(1347263711767),
md5: "35b49676cc2ca872a39b431d41c48cdd", length: 278454,
contentType: "jpg" }
done!
二、nginx-gridfs安装配置
1、通过git安装nginx-gridfs,可以通过下面的命令来安装git。
wget http://down1.chinaunix.net/distfiles/git-1.7.6.tar.bz2
tar -xjf git-1.7.6.tar.bz2
cd git-1.7.6
./configure -prefix=/usr/local/git
make && make install
安装完成后,加入环境变量中
GIT_HOME=/usr/local/git
PATH=$PATH:$GIT_HOME/bin:$GIT_HOME/libexec/git-core
export PATH GIT_HOME
2、安装nginx-gridfs
git clone http://github.com/mdirolf/nginx-gridfs.git
cd nginx-gridfs
git submodule init
#Submodule 'mongo-c-driver'
(git://github.com/mongodb/mongo-c-driver.git) registered for path
'mongo-c-driver'
git submodule update
#查看现有的nginx编译参数
/usr/local/nginx/sbin/nginx -V
nginx: nginx version: nginx/1.1.1
nginx: built by gcc 4.1.2 20080704 (Red Hat 4.1.2-51)
nginx: configure arguments: --user=www --group=www
--prefix=/usr/local/nginx --with-http_stub_status_module
--with-google_perftools_module
#重新编译Nginx,使用上面的现在的编译参数,在后面加上蓝色的部分,路径为nginx-gridfs目录
cd /disk/src/nginx-1.1.1
./configure --user=www --group=www --prefix=/usr/local/nginx
--with-http_stub_status_module --with-google_perftools_module
--add-module=/disk/src/nginx-gridfs
make && make install
注意:要在mongodb启动后,启动nginx服务。
三、Nginx中配置nginx-gridfs
gridfs配置说明
gridfs DB_NAME [root_collection=ROOT] [field=QUERY_FIELD]
[type=QUERY_TYPE] [user=USERNAME] [pass=PASSWORD]
gridfs 表示告诉nginx服务器要调用gridfs模块
root_collection= 指定Gridfs collection的前缀. 默认: fs
field= 指定用于查询的字段 可以是 _id 和 filename. 默认: _id
type= 指定查询的类型,这里支持 objectid, string 和int. 默认: objectid
user= 指定数据库的用户名. 默认: NULL
pass= 指定数据库的密码. 默认: NULL
这里配置了2个地址,分别对应到上面的创建的test和test2库。
location /gridfs/ {
gridfs test; #指定db 为test,其它均为默认本地27017服务
}
location /gridfs2/ {
gridfs test2 field=filename type=string;
mongo 127.0.0.1:27017;
}
对应的访问url,第一个使用默认的id访问,第二个使用文件名访问
http://192.168.4.93/gridfs/504d5baa867ba4bf176a297b.txt
http://192.168.4.93/gridfs2/2.jpg