제목 없는 다이어그램2.jpg

controller

@ResponseBody
	@RequestMapping(value="/uploadSummernoteImageFile.do", method=RequestMethod.POST, produces = "application/json; charset=utf8")
	    public String uploadSummernoteImageFile( @RequestParam("file") MultipartFile multipartFile, 
	    										 @RequestParam(value="writer", defaultValue="modify") String writer,
	    										 @RequestParam(value="boardMyhomeArticleNo", defaultValue="0") int Article,
	    										 HttpServletRequest request ) throws Exception  {
		
		
	    JsonObject jsonObject = new JsonObject();
	    
	    System.out.println("writer야 넘어왔니? : " + writer);
	    System.out.println("Article야 넘어왔니? : " + Article);
	    // 새 글 번호 가져오기
	    if(writer.equals("writer")) {
	    	Article = myhomeService.selectNewMyHomeNO();
	    }
	    
	    System.out.println("이미지 폴더 명에 넣을 새글 번호 : " + Article);
	    
//	    String fileRoot = request.getSession().getServletContext().getRealPath("/resources/images/board/");  // 내부경로 저장
	    String fileRoot = "C:\\\\gami\\\\board\\\\board_myhome\\\\" + Article + "\\\\"; // 외부 경로 저장
	    String originalFileName = multipartFile.getOriginalFilename(); // 원래 파일명
	    System.out.println(originalFileName);
	    String extension = originalFileName.substring(originalFileName.lastIndexOf(".")); // 파일 확장자 확인
	    System.out.println(extension);

	    final String[] ALLOW_EXTENSION = {".gif",".GIF", ".jpg",".JPG",".png",".PNG",".jepg",".JEPG"};   // 확장자 검사
	    if(!Arrays.asList(ALLOW_EXTENSION).contains(extension)){
	        jsonObject.addProperty("responseCode", "extension");
	        String check = jsonObject.toString();
	        System.out.println(check);
	        return check;
	    }

	    String savedFileName = UUID.randomUUID() + extension;  // 파일 이름 새로 부여 : UUID
	    System.out.println(savedFileName);
	    File targetFile = new File(fileRoot + savedFileName);
	    try {
	        InputStream fileStream = multipartFile.getInputStream();
	        FileUtils.copyInputStreamToFile(fileStream, targetFile);

	        // 파일 저장
//	        jsonObject.addProperty("url", fileRoot + savedFileName); // contextroot + resources + 저장할 내부 폴더명
	        System.out.println(fileRoot + savedFileName);
	        System.out.println("떠라 제발 : " + Article + savedFileName);
	        jsonObject.addProperty("fileName", "\\\\" + Article + "\\\\" + savedFileName); // 톰켓 서버.xml에서 경로 설정해줬기에 게시글 번호 폴더명과 파일명을 같이 넘겨야함.
	        
	        jsonObject.addProperty("responseCode", "success");
	        	        
	    } catch (IOException e) {
	        FileUtils.deleteQuietly(targetFile); // 업로드 실패 시 하위 파일 및 폴더 삭제
	        jsonObject.addProperty("responseCode", "error");
	        e.printStackTrace();
	    }
	    String check = jsonObject.toString();
	    return check;
	}
	
	// 작성과 수정 컨트롤러 중...
	 // 폴더에 존재하지 않은 파일 삭제
	    int boardMyhomeArticleNo = newArticle;
        myhomeDomain = myhomeService.selectMyHome(boardMyhomeArticleNo); // 게시글 조회
        
        String fileRoot = "C:\\\\gami\\\\board\\\\board_myhome\\\\" + boardMyhomeArticleNo + "\\\\"; // 외부 경로

        // 위 경로로 파일 객체 생성
        File saveFileDir = new File(fileRoot);
        
       // 파일 목록들을 배열에 담음.
        String[] saveFileList;

        // 파일 목록들을 배열에 담음.
        if(saveFileDir.exists()) {
        saveFileList = saveFileDir.list();
        
        // for문을 돌려서 작성된 글 내용에 파일이 포함되었나 확인
        for(String saveFileName: saveFileList) {
        	System.out.println(saveFileName);
            boolean Check = myhomeDomain.getBoardMyhomeContents().contains(saveFileName);
            System.out.println("사진 포함 여부 : " + Check);
            // 만약 글내용에 포함되어 있지 않다면 해당 파일 삭제.
            if(myhomeDomain.getBoardMyhomeContents().contains(saveFileName)==false) {
            	fileRoot = "C:\\\\gami\\\\board\\\\board_myhome\\\\" + newArticle + "\\\\" + saveFileName;
            	saveFileDir = new File(fileRoot);
            	FileUtils.deleteQuietly(saveFileDir);
            }
           }
        }

myHomeForm.jsp

// 이미지 저장
 function uploadSummernoteImageFile(file, el) {

	 var writer = 'writer';
	 
        let data = new FormData();
        
        data.append("file", file);
        data.append("writer", writer);
        
        $.ajax({
            data : data,
            type : "POST",
            url : "/gami/board/board_myhome/uploadSummernoteImageFile.do",
            contentType : false,
            enctype : 'multipart/form-data',
            processData : false,
            success : function(data) {
            	alert(data.responseCode);
            	alert("/board_myhome" + data.fileName);
                if(data.responseCode == "success") {
                    setTimeout(function () {
                    	                          // 톰켓 서버.xml에 로컬 경로 설정한 변수명 + 파일명 = 로컬 주소
                        $(el).summernote('insertImage', "/board_myhome" + data.fileName, function ($image) {
                            $image.css('width', "20%");
                        });
                    }, 0);
                }else if(data.responseCode == "extension"){
                	alert("gif,jpg,png만 가능합니다.");
                    return false;
                }else{
                	alert("파일 업로드에 실패 하였습니다.");
                    return false;
                }
            }
        });
    }
    
    // 이미지 삭제
     function deleteFile(fileName) {
    	var writer = 'writer';
    	
  	    $.ajax({
  	        url: "/gami/board/board_myhome/deleteSummernoteImageFile.do",  // 서버에 요청을 보낼 URL
  	        type: "POST",
  	        data: { file: fileName,
  	        	  writer: writer},
  	        success: function(response) {
  	            let data = JSON.parse(data);  // 서버에서 받은 JSON 응답 처리
  	            if (data.responseCode === "success") {
  	                alert("이미지가 삭제되었습니다.");
  	                // 본문에서 이미지 삭제
  	                $("img[src$='" + fileName + "']").remove();
  	            } else {
  	                alert("이미지 삭제에 실패하였습니다.");
  	            }
  	        }
  	    });
  	}
<script>
    $("#summernote").summernote({
        // 에디터 높이
        height: 600,
        placeholder:"여기에 내용을 입력하세요.",
        // 에디터 한글 설정
        lang: "ko-KR",
        // 에디터에 커서 이동 (input창의 autofocus라고 생각하시면 됩니다.)
        focus : true,
        toolbar: [
        	// 스타일 설정
        	['style', ['style']],
            // 글꼴 설정
            ['fontname', ['fontname']],
            // 글자 크기 설정
            ['fontsize', ['fontsize']],
            // 굵기, 기울임꼴, 밑줄,취소 선, 서식지우기
            ['style', ['bold', 'italic', 'underline','strikethrough', 'clear']],
            // 글자색
            ['color', ['forecolor','color']],
            // 표만들기
            ['table', ['table']],
            // 글머리 기호, 번호매기기, 문단정렬
            ['para', ['ul', 'ol', 'paragraph']],
            // 줄간격
            ['height', ['height']],
            // 그림첨부, 링크만들기, 동영상첨부
            ['insert',['picture','link','video']],
            // 코드보기, 확대해서보기, 도움말
            ['view', ['codeview','fullscreen', 'help']]
        ],
        callbacks : {
            onImageUpload : function(files, editor, welEditable) { // 파일 업로드(다중업로드를 위해 반복문 사용)
                for (var i = files.length - 1; i >= 0; i--) {
                    uploadSummernoteImageFile(files[i], this);
                }
            },
/*              onChange:function(contents, $editable){ //텍스트 글자수 및 이미지등록개수
                 setContentsLength(contents, 0);
            } */
        },
        fontNames: ['Arial', 'Arial Black', 'Comic Sans MS', 'Courier New','맑은 고딕','궁서','굴림체','굴림','돋음체','바탕체'], // 추가한 글꼴
        // 추가한 폰트사이즈
        fontSizes: ['8','9','10','11','12','14','16','18','20','22','24','28','30','36','50','72']
    });
</script>