springboot2.x对mongoDB的集成

springboot2.x对mongoDB的集成

需引入import com.mongodb.client.gridfs.model.GridFSFile;这个包
/**

  • 1.文件上传:与springboot1.x一样
    /
    (只列出核心代码)
    gridFsTemplate.store(file.getInputStream(),file.getOriginalFilename(),file.getContentType());
    /

    *2.下载
    */
    gridFsTemplate.findOne(query)返回类型由GridFSDBFile改为GridFSFile导致的问题:文件下载时下面的代码不可用
    GridFSDBFile gridFSDBFile = new GridFSDBFile();
    gridFSDBFile.writeTo(response.getOutputStream())
    解决办法:将GridFSFile转换为GridFsResource
    转换类:
package com.example.myallprogram.modules;

import com.mongodb.client.MongoDatabase;
import com.mongodb.client.gridfs.GridFSBucket;
import com.mongodb.client.gridfs.GridFSBuckets;
import com.mongodb.client.gridfs.GridFSDownloadStream;
import com.mongodb.client.gridfs.model.GridFSFile;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.mongodb.MongoDbFactory;
import org.springframework.data.mongodb.gridfs.GridFsResource;
import org.springframework.stereotype.Component;

@Component("gridConfig")
@Configuration
public class GridConfig {
    @Autowired
    private MongoDbFactory mongoDbFactory;
    @Autowired
    private GridFSBucket gridFSBucket;

    @Bean
    public GridFSBucket getGridFSBuckets() {
        MongoDatabase db = mongoDbFactory.getDb();
        return GridFSBuckets.create(db);
    }
    // 将GridFSFile 转成 GridFsResource
    public GridFsResource convertGridFSFile2Resource(GridFSFile gridFsFile) {
        GridFSDownloadStream gridFSDownloadStream = gridFSBucket.openDownloadStream(gridFsFile.getObjectId());
        return new GridFsResource(gridFsFile, gridFSDownloadStream);
    }
}

下载方法:

 @RequestMapping(value = "/downloadFile",method = RequestMethod.GET)
    public void downloadFile(@RequestParam(name = "fileName") String fileName, HttpServletResponse response) throws Exception {
        GridFSFile gridFSFile = gridFsTemplate.findOne(new Query().addCriteria(Criteria.where("filename").is(fileName)));
        GridFsResource fsResource = gridConfig.convertGridFSFile2Resource(gridFSFile);
        IOUtils.copy(fsResource.getInputStream(),response.getOutputStream());
    }

/*
*3.删除
*删除时需要@ResponseBody注解
*/

	@RequestMapping(value="/deleteFile",method = RequestMethod.POST)
    @ResponseBody
    public void deleteFromMongo(@RequestParam(name="fileName") String fileName){
        gridFsTemplate.delete(Query.query(Criteria.where("filename").is(fileName)));
    }

#######################################################################
获取mongo上传时的id:(上传)
 ObjectId objectId = gridFsTemplate.store(file.getInputStream(), fileName, contentType);
 
 这样获取的id就是生成的id,保存在mongoDB数据库的id,根据id 去取值不会重复很方便:(下载)
  @RequestMapping(value = "/downloadFile",method = RequestMethod.GET)
    public void downloadFile(@RequestParam(name = "_id") String _id, HttpServletResponse response) throws Exception {
        GridFSFile gridFSFile = gridFsTemplate.findOne(new Query().addCriteria(Criteria.where("_id").is(_id)));
        GridFsResource fsResource = gridConfig.convertGridFSFile2Resource(gridFSFile);
        IOUtils.copy(fsResource.getInputStream(),response.getOutputStream());

    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

神雕大侠mu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值