springBoot学习之mongoDB gridfs文件操作

gridfs文件操作

1.依赖和系统配置文件

pom

<parent>
    <groupId>org.springframework.bootgroupId>
    <artifactId>spring-boot-starter-parentartifactId>
    <version>2.0.4.RELEASEversion>
    <relativePath/>
parent>
<dependency>
    <groupId>org.springframework.bootgroupId>
    <artifactId>spring-boot-starter-data-mongodbartifactId>
dependency>

application.properties

#mongodb
spring.data.mongodb.host=localhost
spring.data.mongodb.port=27017
spring.data.mongodb.database=gridfs
#集群
#spring.data.mongodb.uri=mongodb://user:pwd@ip1:port1,ip2:port2/database
#spring.data.mongodb.uri=mongodb://name:pass@localhost:27017/test

这里用的springboot版本是2.0.4版本,使用GridFsTemplate的findOne方法,返回的GGridFSDBFile更好为GGridFSFile,文件下载时不能使用以前的GridFSDBFile 操作流了。

GridFSDBFile gridfs = fs.findOne(new BasicDBObject("_id", id));
gridfs.writeTo(file);

需要把GGridFSFile转换为GGridFsResource,主要需要获取GGridFSDownloadStream(由GridFSBucket获取)

2.代码

  • 配置类
@Configuration
public class MongoConf {
    @Autowired
    private MongoDbFactory mongoDbFactory;
    @Autowired
    private GridFSBucket gridFSBucket;


    @Bean
    public GridFSBucket getGridFSBuckets() {
        MongoDatabase db = mongoDbFactory.getDb();
        return GridFSBuckets.create(db);
    }
}
  • 测试类
@RunWith(SpringRunner.class)
@SpringBootTest
public class MongodbTest {
    @Autowired
    private GridFsTemplate gridFsTemplate;

    @Autowired
    private GridFsOperations operations;

    @Autowired
    private GridFSBucket gridFSBucket;

    @Test
    public void delete() throws  Exception{
        gridFsTemplate.delete(query(where("_id").is("5b8a44ba63f89e2bc47285ad")));
    }

    @Test
    public void getFile() throws Exception{
        GridFSFile file = gridFsTemplate.findOne(query(whereFilename().is("a.png")));
        if(file != null){
            System.out.println("_id:"+file.getId());
            System.out.println("_objectId:"+file.getObjectId());
            GridFSDownloadStream in = gridFSBucket.openDownloadStream(file.getObjectId());

            GridFsResource resource = new GridFsResource(file,in);
            InputStream inputStream = resource.getInputStream();
            byte[] f = getBytes(inputStream);


            FileOutputStream out = new FileOutputStream("C:\\Users\\Administrator\\Desktop\\lg.png");
            out.write(f);
        }

    }

    private byte[] getBytes(InputStream inputStream) throws  Exception{
        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        byte[] b = new byte[1024];
        int  i = 0;
        while (-1!=(i=inputStream.read(b))){
            bos.write(b,0,i);
        }
        return bos.toByteArray();
    }

    @Test
    public void storeFile() throws  Exception{
        org.springframework.core.io.Resource resource = new FileSystemResource("C:\\Users\\Administrator\\Desktop\\a.png");
        ObjectId id = gridFsTemplate.store(resource.getInputStream(), resource.getFilename(), ".png");
        System.out.println("_id:"+id);
    }
}


  • 结果

调用文件上传store()
springBoot学习之mongoDB gridfs文件操作_第1张图片

还有文件下载和删除就不一一赘述了

你可能感兴趣的:(java,springboot)