前言
GridFS是一種將大型文件存儲在MongoDB的文件規范:
數據庫支持以BSON格式保存二進制對象。 但是MongoDB中BSON對象最大不能超過4MB。
GridFS 規范提供了一種透明的機制,可以將一個大文件分割成為多個較小的文檔。
為實現這點,該規范指定了一個將文件分塊的標准。每個文件都將在文件集合對象中保存一個元數據對象,一個或多個塊對象可被組合保存在一個塊集合中。
上傳文件
- Shell
mongofiles put xxx.txt
常用參數如下:
-d 指定數據庫
-u –p 指定用戶名,密碼
-h 指定主機
-port 指定主機端口
-r 如果存在同名文件則在put成功后刪除其他同名文件
通過這樣的命令就可以把文件上傳到fs集合中。
- Java
//獲取db
MongoClient mClient = new MongoClient("10.211.55.8");
db = mClient.getDB("test");
//得到Gridfs對象
GridFS fs = new GridFS(db);
//訪問要上傳的文件
File file = new File("/Users/luoaz/05testDir/files/test1.txt");
//執行保持
GridFSInputFile gfFile = fs.createFile(file);
gfFile.save();
下載文件
- Shell
mongofiles get xxx.txt
常用參數如下:
-d 指定數據庫
-u –p 指定用戶名,密碼
-h 指定主機
-port 指定主機端口
-l 下載到本地的文件名,默認和數據庫中的名字一致
通過這樣的命令就可以把文件從fs集合中下載到本地。
- Java
Java 下載的重點是怎么獲取到文件流,獲取到文件流后就跟普通的保持文件到本地一樣了。
//獲取db
MongoClient mClient = new MongoClient("10.211.55.8");
db = mClient.getDB("test");
//得到Gridfs對象
GridFS fs = new GridFS(db);
//要下載到的文件路徑
File file = new File("/Users/files/down_test1.txt");
FileOutputStream os = new FileOutputStream(file);
//獲得文件流
InputStream is = fs.findOne(new BasicDBObject("filename","test1.txt")).getInputStream();
//下載
byte[] bytes = new byte[1024];
while(is.read(bytes)>0){
os.write(bytes);
}
os.flush();
os.close();
刪除文件
- Shell
mongofiles delete xxx.txt
刪除指定名稱的文件,如果存在同名文件則都刪除
常用參數如下:
-d 指定數據庫
-u –p 指定用戶名,密碼
-h 指定主機
-port 指定主機端口
- Java
//獲取db
MongoClient mClient = new MongoClient("10.211.55.8");
db = mClient.getDB("test");
//得到Gridfs對象
GridFS fs = new GridFS(db);
//刪除指定文件名稱的文件
fs.remove("test1.txt");
查看文件
- Shell
1、list
顯示所有文件
mongofiles list xx.txt
顯示所有的指定文件名的文件
2、search
搜索指定名稱的文件,可以模糊搜索
mongofiles list xx.txt
mongofiles list .txt
- Java
這個就跟MongoDB的find用法一樣了
備注
文件操作主要依賴com.mongodb.gridfs 下的幾個類,參考網址
http://api.mongodb.org/java/3.0/com/mongodb/gridfs/GridFS.html