0
点赞
收藏
分享

微信扫一扫

GridFS上传&下载文件


 首先我们先说上传文件到GridFs;上传文件到GridFs上相对比较简单,只需要GridFsTemplate的store方法;

        1.上传文件

        如果文件为String类型则我们需要将其转化为inputstream的流对象,然后在调用store方法,如果需要返回字符串类型则可以使用tostring方法;

InputStream inputStream = IOUtils.toInputStream(htmlContent, "utf-8");
//将html文件上传到GridFs上,返回值为上传文件的id
ObjectId store = gridFsTemplate.store(inputStream, cmsPage.getPageName());
//将id转化为string类型
tring htmlFileId = store.toHexString();

        2.从GridFS上下载文件

                2.1.我们从GridFS上下载文件需要使用到gridFSBucket因此,我们需要创gridFSBucket并交由spring管理,

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

    @Bean
    public GridFSBucket getGridsBucket(MongoClient mongoClient){
        MongoDatabase database = mongoClient.getDatabase(db);
        GridFSBucket gridFSBucket = GridFSBuckets.create(database);
        return gridFSBucket;
    }

                2.2.此时我们就可以正式开始写下载的方法了

              首先,我们需要使用gridFsTemplate的findOne来查找需要下载的文件,然后使用gridFSBucket的openDownloadStream方法来打开下载流,然后使用GridFsResource来操作下载流,通过getTemplate来获得下载流。

        如果你想将下载的文件存在你的电脑上,你也可以创建输出流,通过IOUtils的copy方法来输出;这里我并没有将其存放在本地。

//根据htmlId查询需要下载的对象
        GridFSFile gridFSFile = gridFsTemplate.findOne(Query.query(Criteria.where("_id").is(htmlFileId)));
        //打开下载流
        GridFSDownloadStream downloadStream = gridFSBucket.openDownloadStream(gridFSFile.getObjectId());
        //操作下载流 参数一个是需要下载的对象 另一个是下载流
        GridFsResource gridFsResource = new GridFsResource(gridFSFile,downloadStream);
        //获取下载流
        try {
            InputStream inputStream = gridFsResource.getInputStream();
            return inputStream;
        } catch (IOException e) {
            log.error("下载模板异常{}",e.getMessage());
            e.printStackTrace();
        }



举报

相关推荐

0 条评论