控制器
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();
}
}
服务代码
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;
}
}