SpringBoot 통합 MongoDB 구현 파일 업로드 다운로드 삭제

본문 의 주요 내용
MongoDB 기초 조작 명령 예시 연습
  • MongoDB 는 GridFSTemplate 에 있 는 파일 업로드,다운로드,삭제 등 작업(작업 중점 사용)
  • 1.기본 명령
    만 든 데이터베이스 이름:horse,만 든 집합 이름:blog
    
    #      
    use horse
    #        [horse]
    db.dropDatebase()
    #        
    show dbs
    
     #           
    db.createUser({user:"horse",pwd:"mongo123",roles:[{role:"readWrite",db:"horse"}]})
    
    #          
    db.createCollection("blog")
    #         
    db.blog.drop()
    #        [horse]     
    show collections
    
    
    #     
    db.blog.insert({"name":"Tom","age":23,"sex":true})
    db.blog.insertOne({"name":"Top","age":20,"sex":true})
    db.blog.insertMany([{"name":"Jerry","age":22,"sex":false},{"name":"Free","age":21,"sex":true}])
    
    
    #     
    db.blog.update({"name":"Top"},{$set:{"name":"TopSun"}},{multi:true})
    
    
    #     
    db.blog.remove({"sex":false}, true)
    db.blog.deleteMany({"age":23})
    db.blog.deleteOne({"age":22})
    #         
    db.blog.deleteMan({})
    
    
    #     
    db.blog.find().pretty()   #       (    ,    )
    db.blog.findOne({"name":"Tom"})   #     
    db.blog.find({"age":{$lt: 23},"name":"Free"}).pretty()   #   and    
    db.blog.find({$or:[{"age":{$lt:23}},{"name":"Free"}]}).pretty()   # or    
    db.blog.find({"age":{$lt:23},$or:[{"name":"Free"},{"sex":"false"}]}).pretty() # and or      
    db.blog.find().limit(2).skip(1).sort({"age":1}).pretty()   # limit、skip、sort    (    :sort-> skip ->limit)
    
    #     (    )
    db.blog.aggregate([{$group:{_id:"$age",count:{$sum:1}}}])
    
    
    2.GridFsTemplate 사용
    2.1 pom 의존 도입
    
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-data-mongodb</artifactId>
            </dependency>
    
    2.2 설정 yml
    
    spring:
      data:
        mongodb:
          host: *.*.*.*
          username: ***
          password: ***
          database: ***
          port: 27017
     #            
      servlet:
        multipart:
          max-file-size: 10MB
          max-request-size: 50MB
    
    2.3 업로드 다운로드 삭제
    질풍 에 직면 하 라:HuTool 공구 꾸러미 를 연결 하여 먹 는 것 이 더 좋다!!!
    
    /**
     * @author Mr.Horse
     * @version 1.0
     * @description: MongoDB     、  、       (  HuTool   )
     * @date 2021/4/29 9:53
     */
    @Validated
    @Controller
    @RequestMapping("/mongo")
    public class MongoUploadController {
    
        private static Logger logger = LoggerFactory.getLogger(MongoUploadController.class);
    
        @Autowired
        private GridFsTemplate gridFsTemplate;
    
        @Autowired
        private MongoTemplate mongoTemplate;
    
        private static final List<String> CONTENT_TYPES = Arrays.asList("image/gif", "image/jpeg", "image/jpg", "image/png");
    
        /**
         * MongoDB    (    )
         *
         * @param file
         * @return
         */
        @PostMapping("/upload")
        public ResponseEntity<String> fileUpload(@RequestParam("file") MultipartFile file) {
            try {
                //       (    ,    )
                String originalFilename = file.getOriginalFilename();
                if (StrUtil.isBlank(originalFilename)) {
                    return ResponseEntity.badRequest().body("    ");
                }
                String contentType = file.getContentType();
                if (!CONTENT_TYPES.contains(contentType)) {
                    return ResponseEntity.badRequest().body("      ");
                }
                InputStream inputStream = file.getInputStream();
                BufferedImage bufferedImage = ImageIO.read(inputStream);
                if (ObjectUtil.isEmpty(bufferedImage)) {
                    return ResponseEntity.badRequest().body("      ");
                }
    
                //      
                String suffix = FileNameUtil.getSuffix(originalFilename);
                String fileName = IdUtil.simpleUUID().concat(".").concat(suffix);
    
                //     ,  ObjectId
                ObjectId objectId = gridFsTemplate.store(inputStream, fileName, contentType);
                return StrUtil.isBlank(String.valueOf(objectId)) ? ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("      ") : ResponseEntity.ok(String.valueOf(objectId));
            } catch (IOException e) {
                return ResponseEntity.badRequest().body("      ");
            }
        }
    
    
        /**
         *   ObjectId          ,          ,            
         *
         * @param objectId
         */
        @GetMapping("/read")
        public void queryFileByObjectId(@RequestParam("objectId") @NotBlank(message = "ObjectId    ") String objectId, HttpServletResponse response) {
            //   objectId    
            GridFSFile file = gridFsTemplate.findOne(new Query(Criteria.where("_id").is(objectId)));
            //        
            GridFSBucket gridFsBucket = GridFSBuckets.create(mongoTemplate.getDb());
            InputStream inputStream = null;
            OutputStream outputStream = null;
            try {
                if (ObjectUtil.isNotNull(file)) {
                    //        
                    GridFSDownloadStream fileStream = gridFsBucket.openDownloadStream(file.getObjectId());
                    //   girdFsResource,       ,     
                    GridFsResource gridFsResource = new GridFsResource(file, fileStream);
                    //      
                    inputStream = gridFsResource.getInputStream();
                    outputStream = response.getOutputStream();
                    byte[] bytes = new byte[1024];
                    if (inputStream.read(bytes) != -1) {
                        outputStream.write(bytes);
                    }
                }
            } catch (IOException e) {
                logger.error("      : {}", e.getMessage());
            } finally {
                IoUtil.close(outputStream);
                IoUtil.close(inputStream);
            }
        }
    
        /**
         *   ObjectId    
         *
         * @param objectId
         * @return
         */
        @DeleteMapping("/remove")
        public ResponseEntity<String> removeFileByObjectId(@RequestParam("objectId") @NotBlank(message = "ObjectId    ") String objectId) {
            gridFsTemplate.delete(new Query(Criteria.where("_id").is(objectId)));
            return ResponseEntity.ok("    ");
        }
    
    }
    
    브 라 우 저 페이지 에서 이 자원 을 다운로드 하 는 기능 이 필요 하 다 면 js 와 결합 하여 작업 할 수 있 습 니 다(파일 형식 은 구체 적 인 업무 수요 에 따라 정 합 니 다).주요 구현 코드 는 다음 과 같다.
    
        downloadNotes(noteId) {
          axios({
            url: this.BASE_API + '/admin/mongo/file/query/' + noteId,
            method: 'get',
            responseType: 'arraybuffer',
            params: { type: 'download' }
          }).then(res => {
            // type           ,   pdf  
            const pdfUrl = window.URL.createObjectURL(new Blob([res.data], { type: `application/pdf` }))
            const fname = noteId //        
            const link = document.createElement('a')
            link.href = pdfUrl
            link.setAttribute('download', fname)
            document.body.appendChild(link)
            link.click()
            URL.revokeObjectURL(pdfUrl) //   URL   
          })
        }
    
    이상 은 SpringBoot 가 MongoDB 를 통합 하여 파일 업로드 와 다운로드 삭제 에 관 한 상세 한 내용 입 니 다.SpringBoot 통합 MongoDB 에 관 한 자 료 는 다른 관련 글 을 주목 하 세 요!

    좋은 웹페이지 즐겨찾기