GridFS檔案操作記錄

2021-10-03 14:21:34 字數 2417 閱讀 6108

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 也可以方便的儲存為...