3.3.3 GridFS研究
3.3.3.1 GridFS介紹
GridFS是MongoDB提供的用于持久化存儲檔案的子產品,CMS使用MongoDB存儲資料,使用GridFS可以快速內建開發。
它的工作原理是:
在GridFS存儲檔案是将檔案分塊存儲,檔案會按照256KB的大小分割成多個塊進行存儲,GridFS使用兩個集合(collection)存儲檔案,一個集合是chunks, 用于存儲檔案的二進制資料;
一個集合是fifiles,用于存儲檔案的中繼資料資訊(檔案名稱、塊大小、上傳時間等資訊)。
從GridFS中讀取檔案要對檔案的各各塊進行組裝、合并。
詳細參考:https://docs.mongodb.com/manual/core/gridfs/
3.3.3.2 GridFS存取檔案測試
1、存檔案
使用GridFsTemplate存儲檔案測試代碼:
向測試程式注入GridFsTemplate
@Test
public void testGridFs() throws FileNotFoundException {
//要存儲的檔案
File file
= new File(
"
d:/index_banner.html
"
);
//定義輸入流
FileInputStream inputStram = new FileInputStream(file);
//向GridFS存儲檔案
ObjectId objectId
= =
gridFsTemplate.store(inputStram,
"
輪播圖測試檔案01
"
,
""
);
//得到檔案ID
String fileId
=
objectId.toString();
System.out.
println(file);
}
存儲原理說明:
檔案存儲成功得到一個檔案id
此檔案id是fs.fifiles集合中的主鍵。
可以通過檔案id查詢fs.chunks表中的記錄,得到檔案的内容。
2、讀取檔案
1)在confifig包中定義Mongodb的配置類,如下:
GridFSBucket用于打開下載下傳流對象
@Configuration
public class MongoConfig {
@Value(
"
${spring
.data.mongodb.database}
"
)
String db;
@Bean
public GridFSBucket getGridFSBucket(MongoClient mongoClient){
MongoDatabase database
= mongoClient.
getDatabase(db);
GridFSBucket bucket
=
GridFSBuckets.create(database);
return bucket;
}
}
2)測試代碼如下
@SpringBootTest
@RunWith(SpringRunner.class)
public class GridFsTest {
@Autowired
GridFsTemplate gridFsTemplate;
@Autowired
GridFSBucket gridFSBucket;
@Test
public void queryFile() throws IOException {
String fileId
=
"
5b9c54e264c614237c271a99
"
;
//根據id查詢檔案
GridFSFile gridFSFile
=
gridFsTemplate.findOne(Query
.
query(Criteria.where(
"
_id
"
)
.is(fileId)));
//打開下載下傳流對象
GridFSDownloadStream gridFSDownloadStream =
gridFSBucket.openDownloadStream(gridFSFile.
getObjectId());
//建立gridFsResource,用于擷取流對象
GridFsResource gridFsResource
= new GridFsResource(gridFSFile,gridFSDownloadStream);
//擷取流中的資料
String s
= IOUtils.toString(gridFsResource.
getInputStream(),
"
UTF
‐
8
"
);
System.out.
println(s);
}
...
3、删除檔案
//删除檔案
@Test
public void testDelFile() throws IOException {
//根據檔案id删除fs.files和fs.chunks中的記錄
gridFsTemplate.delete(Query
.
query(Criteria.where(
"
_id
"
)
.is(
"
5b32480ed3a022164c4d2f92
"
)));
}
3.3.4 模闆存儲
根據模闆管理的流程,最終将模闆資訊存儲到MongoDB的cms_template中,将模闆檔案存儲到GridFS中。
模闆管理功能在課堂中不再講解,教學中手動向cms_template及GridFS中存儲模闆,方法如下:
1、添加模闆
1)使用GridFS測試代碼存儲模闆檔案到GridFS,并得到檔案id.
2)向cms_template添加記錄。

2、删除模闆
1)使用GridFS測試代碼根據檔案id删除模闆檔案。
2)根據模闆id删除cms_template中的記錄。
3、修改模闆資訊
使用Studio 3T修改cms_template中的記錄。
4、修改模闆檔案
1)通過Studio 3T修改模闆檔案(此方法限檔案小于256K)
可以通過Studio 3T修改模闆檔案,先找到模闆檔案,再導入進去: