【MongoDB】GridFS入門

11283 ワード

一、紹介


GridFSはMongoDBが提供するストレージファイルを永続化するためのモジュールであり、CMSはMongoDBを使用してデータを格納し、GridFSを使用して迅速に統合開発することができる.その動作原理は、GridFSでファイルをブロック化して格納し、ファイルは256 KBのサイズで複数のブロックに分割して格納し、GridFSは2つのセット(collection)を使用してファイルを格納し、1つのセットはchunksで、ファイルのバイナリデータを格納する.1つのセットはfilesであり、ファイルのメタデータ情報(ファイル名、ブロックサイズ、アップロード時間などの情報)を格納するために使用される.GridFSからファイルを読み込むには、ファイルの各ブロックを組み立て、マージします.詳細:https://docs.mongodb.com/manual/core/gridfs/

二、実例


1、GridFSアクセスファイルテスト


1、ファイルを保存する


GridFsTemplateを使用してファイルテストコードを格納:GridFsTemplateをテストプログラムに注入します.
@SpringBootTest
@RunWith(SpringRunner.class)
public class GridFsTest {

    @Autowired
    GridFsTemplate gridFsTemplate;

    /**
     *  
     */
    @Test
    public void testGridFsSaveFile() throws FileNotFoundException {

        // 
        File file = new File("e:/index_banner.ftl");
        //  
        FileInputStream inputStram = new FileInputStream(file);
        //  GridFS 
        ObjectId objectId = gridFsTemplate.store(inputStram, " 01", "");
        //  ID
        String fileId = objectId.toString();
        System.out.println(file);
    }
}


記憶原理説明:ファイル記憶に成功して1つのファイルidを得たこのファイルidはfsである.filesコレクションのプライマリ・キー.ファイルidでfsを問い合わせることができる.chunksテーブルのレコードを取得し、ファイルの内容を取得します.

2、ファイルの読み込み


1)configパッケージでMongodbの構成クラスを定義します.GridFSBucketはダウンロードストリームオブジェクトを開くために使用します.
/**
 * @author  
 * @desc  Mongodb 
 * @email [email protected]
 * @create 2019/07/17 21:53
 **/
@Configuration
public class MongoConfig {

    @Value("${spring.data.mongodb.database}")
    String db;

    /**
     * GridFSBucket 
     * @param mongoClient
     * @return
     */
    @Bean
    public GridFSBucket getGridFSBucket(MongoClient mongoClient) {
        MongoDatabase database = mongoClient.getDatabase(db);
        GridFSBucket bucket = GridFSBuckets.create(database);
        return bucket;
    }
}

テストコード:
@SpringBootTest
@RunWith(SpringRunner.class)
public class GridFsTest {

    @Autowired
    GridFsTemplate gridFsTemplate;

    @Autowired
    GridFSBucket gridFSBucket;

    /**
     *  
     * @throws IOException
     */
    @Test
    public void queryFile() throws IOException {

        String fileId = "5d2f261dd8d5cf41c0465db3";
        //  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、ファイルの削除
    /**
     *   
     * @throws IOException
     */
    @Test
    public void testDelFile() throws IOException {
        // id fs.files fs.chunks  			  
        gridFsTemplate.delete(Query.query(Criteria.where("_id").is("5d2f261dd8d5cf41c0465db3")));
    }