赞
踩
控制器
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; } }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。