GridFsTemplate如何配置使用自定义的store bucket存储桶

一.思路

在使用MongoDB的GridFS的时候,默认存储文件的是fs的存储桶,如navicat所示
GridFsTemplate如何配置使用自定义的store bucket存储桶_第1张图片

那么假如我使用自定义的存储桶fs1,该怎么设置呢?

首先,查看一下我们通过注解使用的GridFsTemplate的源码,发现提供了构造参数

public GridFsTemplate(MongoDbFactory dbFactory, MongoConverter converter, @Nullable String bucket) {
        super(converter);
        Assert.notNull(dbFactory, "MongoDbFactory must not be null!");
        this.dbFactory = dbFactory;
        this.bucket = bucket;
}

GridFsTemplate如何配置使用自定义的store bucket存储桶_第2张图片

那么不就是调用构造参数,传入bucket的值不就行了?

点进去查看MongoDbFactory和MongoConverter的源码,可知这两个都是接口,总所周知接口不能实例化,而且这两个参数不能为空,硬要使用可以使用接口的实现类,然后接口实现类不止一个!细看源码,源码注释说的很清楚了,要使用已经给出了的,MongoDbFactory和MongoConverter。首先我们都知道,springboot的ioc依赖注入会把所有的bean类加载到bean容器,那么也就是说,我们可以从bean容器中取出这两个bean

二.springboot配置GridFsTemplate使用自定义的store bucket存储桶

上配置代码:

@Configuration
public class MongoConfig { 

    @Bean
    public GridFsTemplate gridFsTemplate(MongoDbFactory dbFactory, MongoConverter converter) {
        return new GridFsTemplate(dbFactory, converter, "fs1");
    }
   
}

就是这么简单是不是?

三.使用GridFsTemplate实现上传文件和删除文件

上传文件:

void contextLoads3() throws Exception {
    File file = new File("filePath");
    String fileName = file.getName();
    InputStream inputStream = new FileInputStream(file);
    String contentType = file.getName().substring(fileName.lastIndexOf(".")+1,fileName.length());
    ObjectId objectId = gridFsTemplate.store(inputStream, fileName, contentType);
    System.out.println(objectId);
}

删除文件

void contextLoads4() throws Exception {
    Query query = Query.query(Criteria.where("_id").is("objectId"));
    gridFsTemplate.delete(query);
}

你可能感兴趣的:(数据库)