gridfs是一中大型檔案儲存在mongodb的檔案規範, 所有官方支援的驅動都實現了gridfs規範.
gridfs儲存檔案方式: 將檔案分為多個塊, 每個塊作為乙個單獨的文件, 預設情況下, 每個塊的大小為256k.
當gridfs獲取檔案時, mongodb的驅動程式負責將多個塊組裝成完整的檔案, 當不必要載入整個檔案時, 你可以通過gridfs進行範圍查詢, 可以訪問檔案的任意部分.
應用場景:
如果你的檔案系統限制目錄下的檔案數目, 可以使用mongodb在目錄下儲存任意多的檔案
當訪問比較大的檔案時, 想要訪問檔案的其中一部分(分段訪問)
想要實現多個系統間檔案和元資料同步
注意:mongodb不支援對檔案多個快的跟新操作的原子性, 如果業務需要的話, 可以通過設定元資料的當前版本號來**實現.
儲存管理
gridfs使用兩個集合儲存資料, 乙個集合儲存檔案塊, 另外乙個儲存檔案元資料.
具體為:
fs.files 用來儲存檔案的元資料(檔名稱、塊大小、上傳時間…)
fs.chunks 用來儲存檔案內容資訊(大的檔案會被拆分成多個collection儲存)
使用場景: springcloud
1 . 配置mongodb:
spring:
data:
mongodb:
uri: mongodb://root:123@localhost:27017
database: ***(資料庫名)
2 .匯入依賴
使用的是gridfstemplate類, 該類已經封裝在了org.springframewpork.data.mongodb中, 所以只需要匯入mongodb的依賴即可:
org.springframework.boot
spring-boot-starter-data-mongodb
3 .操作**
@autowired //宣告物件
private gridfstemplate gridfstemplate;
存檔案file file = new file(「d:\**」); //根據檔案位址, 建立要存的檔案物件
fileinputstream fileinputstream = new fileinputstream(file); //建立檔案輸入流
objectid objectid = gridfstemplate.store(fileinputstream, 「儲存後的檔名(collection的filename)」);
system.out.println(objectid);
方法原始碼:
public objectid store(inputstream content, string filename)
讀取檔案
mongoclient mongoclient = new mongoclient(); //建立mongodb客戶端物件
mongodatabase database = mongoclient.getdatabase(db); //建立mongodb資料庫物件
gridfsbucket gridfsbucket = gridfsbuckets.create(database); //bucket 英[ˈbʌkɪt] 桶
gridfsfile gridfsfile = gridfstemplate.findone(query.query(criteria.where("_id").is(「5dfdcc3cfd34cd07e066b71e」))); //通過 gridfstemplate中的findone方法獲取查詢檔案物件
gridfsdownloadstream gridfsdownloadstream =
gridfsbucket.opendownloadstream(gridfsfile.getobjectid());
gridfsresource gridfsresource = new gridfsresource(gridfsfile, gridfsdownloadstream);
string tostring = ioutils.tostring(gridfsdownloadstream, 「utf-8」);
system.out.println(tostring);
你也可以將以上步驟封裝:
@configuration
public class mongoconfig ")
string db;
@bean
public gridfsbucket getgridfsbucket(mongoclient mongoclient)
}刪除檔案
//根據檔案id刪除fs.files和fs.chunks中的記錄 gridfstemplate.delete(query.query(criteria.where("_id").is(「5b32480ed3a022164c4d2f92」)));
MongoDB基於GridFS管理檔案
前言 gridfs是一種將大型檔案儲存在mongodb的檔案規範 資料庫支援以bson格式儲存二進位制物件。但是mongodb中bson物件最大不能超過4mb。gridfs 規範提供了一種透明的機制,可以將乙個大檔案分割成為多個較小的文件。為實現這點,該規範指定了乙個將檔案分塊的標準。每個檔案都將在...
分布式檔案系統 GridFS
gridfs是mongodb提供的用於持久化儲存檔案的模組,cms使用mongodb儲存資料,使用gridfs可以快速整合開發。它的工作原理是 在gridfs儲存檔案是將檔案分塊儲存,檔案會按照256kb的大小分割成多個塊進行儲存,gridfs使用兩個集合 collection 儲存檔案,乙個集合是...
使用 XML 檔案記錄操作日誌
記錄應用程式的操作日誌可以使用資料庫 文字檔案 xml檔案等。我這裡介紹的是使用 xml 檔案記錄操作日誌。我覺得使用 xml 記錄操作日誌有如下幾點好處 1.不占用資料庫的空間,可以任意的刪除歷史操作日誌。2.datatable 可以方面的讀入 xml 檔案,datatable 也可以方便的儲存為...