게시판13) 글 수정시 파일 변경

boardUpdate.jsp

  • update를 하는 파일의 form태그에도 enctype= “multipart/form-data”를 추가해준다.

  • name을 “upload”로 준다. 그럼 form이 제출될 때, boardupdate 메소드로 “upload”변수와 그 변수값인 파일을 parma으로 받을 수 있게된다.

    <form id ="" action ="boardupdate" method = "POST" enctype = "multipart/form-data">
        <tr>
            <th>첨부파일</th>
            <td><input type= "file"  name="upload"></td>
        </tr>
    </form>
    

boardController.java

  • 흐름을 먼저 본다면,
  1. 현재 수정하는 board 객체를 받는다.

  2. board 객체에 savedfile이 있는지 확인한다.

  3. savedfile이 없으면, 바로 newsavedfile 을 board에 set해주고,

    savedfile이 있으면, 서버에 있는 파일을 지워주고 newsavedfile을 board에 set해주고, 서버에 저장한다.

  4. 기존 board 객체를 재사용하지 않고, 새 객체를 만들었으므로 userid를 set해준다.
  5. repository.boardUpdate(board);를 해 업데이트를 완료한다.
@RequestMapping(value = "/boardupdate", method = RequestMethod.POST)
public String boardUpdate(Model model, Board board,MultipartFile upload, HttpSession session) {
    Board oldBoard = repository.boardDetail(board.getBoardseq());
    String savedfile = oldBoard.getSavedfile();

    //수정할 때 파일을 서버에서 지웠다가 다시 쓴다. 왜냐면 이름은 같아도 다른 파일일 수도 있기 때문에 코드내에서 판별하기 좀 그럼.
    if(savedfile!= null) {
        String fullpath = uploadPath + "/" + savedfile;
        File file = new File(fullpath);
        //파일 삭제는 간단하네.
        if(file.isFile()) {
            file.delete();
        }
    }

    String newsavedfile = saveFile(upload);
    //upload는 수정폼에서 첨부된 파일
    if(upload.getSize()!=0) {
        //서버에서 넘길 때 파일이름을 넘기는게 아니라 파일 자체를 upload로 넘긴다.originalfile 변수를 jsp 쪽에서 넘기지 않아서 이렇게 여기서 set해줘야한다.
        String originalfile = upload.getOriginalFilename();
        board.setOriginalfile(originalfile);
        board.setSavedfile(newsavedfile);
    }
    String userid = (String)session.getAttribute("loginId");
    board.setUserid(userid);
    int result  = repository.boardUpdate(board);
    return "redirect:boardlist";
}

boardMapper.xml

  • 만약 originalfile과 savedfile이 null 이 아닐 경우 , DB에 같이 update해준다.?? –> 틀린듯? 만약 기존 글에서는 파일이 있었는데 이번글에서는 파일을 삭제했다면 null 이 되여아하니까…! if문을 빼야지 맞을 것 같다.
<update id = "boardUpdate" parameterType = "Board">
UPDATE
	board
SET
	title = #{title}
	, message = #{message}
	,regdate = sysdate
	<if test="originalfile!=null and savedfile !=null">
	,originalfile = #{originalfile}
	, savedfile = #{savedfile}
	</if>
	WHERE
		boardseq = #{boardseq}
</update>

◇ Spring 게시판 포스팅 시리즈 ◇

  1. Spring 과 DB 연결하기
  2. 회원 가입 화면 구성
  3. ID 중복 확인 하기
  4. 로그인 페이지 만들기
  5. 게시판 화면 구성하기
  6. 글 쓰기 기능 구현
  7. 글 확인 기능 구현
  8. 글 수정 기능 구현
  9. 게시판 페이징
  10. 파일 첨부 기능
  11. 파일 다운 기능
  12. MIME 타입
  13. 글 수정시 파일 변경 - 현재 글

수고하셨습니당!!


© 2018. All rights reserved.

Powered by Hydejack v8.5.2