当前位置:   article > 正文

springboot整合mongoDB实现文件上传、下载、删除、通过元数据查找、通过id查找_springboot 集成mongodb gridfstemplate下载文件

springboot 集成mongodb gridfstemplate下载文件

控制器

package com.gen.server.module.model.controller;

import com.gen.server.module.model.base.MongodbServer;
import com.gen.server.module.model.entity.IconDes;
import com.mongodb.client.gridfs.GridFSFindIterable;
import com.mongodb.client.gridfs.model.GridFSFile;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.bson.Document;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.util.List;

/**
 * @author fxr
 * @date 2022/4/7
 */
@RestController
@RequestMapping("/mongo/operation")
@Api(tags = "Mongo上传下载")
public class MongoController {
    @Autowired
    private MongodbServer mongodbServer;

    @PostMapping("/upload")
    @ApiOperation(value = "上传文件", notes = "/upload")
    public String upload(MultipartFile multipartFile,
                         IconDes iconDes)  {
        String objectId = null;
        try {
           objectId = mongodbServer.uploadMongoDB(multipartFile.getInputStream(),
                    multipartFile.getOriginalFilename(),
                    iconDes);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return objectId;
    }

    @PostMapping("/download")
    @ApiOperation(value = "下载文件", notes = "/download")
    public void download(String objectId,
                         String desAdress)  {
        try {
            mongodbServer.downLoadMongoDB(objectId, desAdress);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }


    @GetMapping("/findOne/{objectId}")
    @ApiOperation(value = "查找一个", notes = "/findOne/{objectId}")
    public GridFSFile findOne(@PathVariable("objectId") String objectId)  {
        return mongodbServer.findOne(objectId);
    }

    @DeleteMapping("/deleteOne/{objectId}")
    @ApiOperation(value = "删除一个", notes = "/deleteOne/{objectId}")
    public void deleteOne(@PathVariable("objectId") String objectId)  {
        mongodbServer.deleteOne(objectId);
    }

    @GetMapping("/findByMeteData")
    @ApiOperation(value = "通过元数据查找", notes = "/findByMeteData")
    public GridFSFindIterable findByType()  {
        return mongodbServer.findByMeteData();
    }

}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74

服务代码

package com.gen.server.module.model.base;

import com.gen.server.module.model.entity.IconDes;
import com.mongodb.BasicDBObject;
import com.mongodb.client.gridfs.GridFSBucket;
import com.mongodb.client.gridfs.GridFSDownloadStream;
import com.mongodb.client.gridfs.GridFSFindIterable;
import com.mongodb.client.gridfs.model.GridFSFile;
import org.apache.tomcat.util.http.fileupload.IOUtils;
import org.bson.BsonValue;
import org.bson.Document;
import org.bson.types.ObjectId;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.gridfs.GridFsResource;
import org.springframework.data.mongodb.gridfs.GridFsTemplate;
import org.springframework.stereotype.Component;

import java.io.*;
import java.util.Date;
import java.util.List;

/**
 * @author fxr
 * @date 2022/4/7
 */
@Component
public class MongodbServer {
    //注入SpringBoot提供的mongodb的GridFS对象
    @Autowired
    private GridFsTemplate gridFsTemplate;

    @Autowired
    private GridFSBucket gridFSBucket;

    public String uploadMongoDB(InputStream inputStream, String fileName, IconDes iconDes) throws FileNotFoundException {

//        File file = new File("F:\\xucheng\\xcEduCodet\\test-freemarker\\src\\main\\resources\\templates\\index_banner.ftl");

//        InputStream inputStream = new FileInputStream(file);
        //5dc510761a3c29be50f87ae2
        //通过gridFsTemplate获取添加成功的ObjectId
        ObjectId objectId = gridFsTemplate.store(inputStream, fileName, iconDes);

//        System.out.println(objectId);

        return objectId.toString();
    }

    public void downLoadMongoDB(String objectId,String desAdress) throws IOException {
        //通过gridFsTemplate模版获取gridFSFile对象 根据Id查询单个对象
        GridFSFile gridFSFile = gridFsTemplate.findOne(Query.query(Criteria.where("_id").is(objectId)));
        //根据文件ObjectId查出文件对象
        GridFSDownloadStream gridFSDownloadStream = gridFSBucket.openDownloadStream(gridFSFile.getObjectId());
        //获取文件的下载流
        GridFsResource gridFsResource = new GridFsResource(gridFSFile,gridFSDownloadStream);
        //将下载流转为输入流
        InputStream inputStream = gridFsResource.getInputStream();
        //设置输出流存储到指定位置
        OutputStream outputStream = null;
        if (desAdress.endsWith("\\")){
             outputStream = new FileOutputStream(new File(desAdress+gridFSFile.getFilename()));
        }else {
            outputStream = new FileOutputStream(new File(desAdress+"\\"+gridFSFile.getFilename()));
        }
        //通过IOUtils完成流copy
        IOUtils.copy(inputStream,outputStream);

        outputStream.close();

        inputStream.close();
    }

    public GridFSFile findOne(String objectId){
        GridFSFile gridFSFile = gridFsTemplate.findOne(Query.query(Criteria.where("_id").is(objectId)));
        String fileName = gridFSFile.getFilename();
        ObjectId objectId1 = gridFSFile.getObjectId();
        int size = gridFSFile.getChunkSize();
        BsonValue bsonValue = gridFSFile.getId();
        long length = gridFSFile.getLength();
        Document document = gridFSFile.getMetadata();
        Date uploadDate = gridFSFile.getUploadDate();
//        System.out.println(document);
        return gridFSFile;
    }

    public void deleteOne(String objectId){
        gridFsTemplate.delete(Query.query(Criteria.where("_id").is(objectId)));
    }

    public GridFSFindIterable findByMeteData(){
        GridFSFindIterable gridFSFile = gridFsTemplate.find(Query.query(Criteria.where("metadata.type").is("展示")));
        return gridFSFile;
    }


}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop】
推荐阅读
相关标签
  

闽ICP备14008679号