<h1 align="center">${board.boardNo }번 게시물 수정하기</h1>
<br>
<br>
<!-- enctype을 이용해 파일을 전송한다 오타조심!!!!-->
<form action="/board/modify.kh" method="post" enctype="multipart/form-data">
<input type="hidden" name="boardNo" value="${board.boardNo }" readonly>
<input type="hidden" name="boardRename" value="${board.boardRename }">
<input type="hidden" name="boardFile" value="${board.boardFile }">
<input type="hidden" name="boardFildpath" value="${board.boardFildpath }">
<table align="center" border="1">
<tr>
<td>제목</td>
<td><input type="text" name="boardTitle" value="${board.boardTitle }" required="required"></td>
</tr>
<tr>
<td>작성자</td>
<td><input type="text" name="boardWirter" value="${board.boardWirter }" readonly="readonly"></td>
</tr>
<tr>
<td>내용</td>
<td><textarea id="summernote" name="boardContents"
style="resize: none; width: 500px; height: 100%;" required="required"> ${board.boardContents }</textarea></td>
</tr>
<tr>
<td>첨부파일</td>
<td><input type="file" name="reloadFile">
<a href="#"> ${board.boardFile }</a>
</td>
</tr>
<tr>
<td colspan="2"><input type="submit" value="등록"> <input
type="reset" value="취소">
<a href="#">목록으로</a>
<a href="#">이전페이지로</a>
</td>
</tr>
</table>
</form>
<input type="hidden" name="boardRename" value="${board.boardRename }">
<input type="hidden" name="boardFile" value="${board.boardFile }">
<input type="hidden" name="boardFildpath" value="${board.boardFildpath }">
/**
* 게시글 수정
* @param mv
* @param board
* @return
*/
@RequestMapping (value="/board/modify.kh", method = RequestMethod.POST)
public ModelAndView modifyBoard(ModelAndView mv,
@ModelAttribute Board board,
//1
@RequestParam(value="reloadFile", required=false) MultipartFile reloadFile,
HttpServletRequest request) {
//2
try {
String boardFilename = reloadFile.getOriginalFilename();
if(reloadFile != null && !boardFilename.equals(""))//새로 파일을 올렸을때, 이름이 없는 파일이 있을 경우를 생각해 null체크 2번함
{//수정 할경우 대체/ 삭제 후 등록/ 대체는 어려워서 삭제후 등록으로 한다
String root = request.getSession().getServletContext().getRealPath("resources");// 저장된 파일의 경로를 가져온다.
String savedPath = root + "\\buploadFiles"; //가져온 경로에 업로드 파일이 들어있는 폴더의 경로까지 더해줌
File file = new File(savedPath+"\\"+board.getBoardRename()); //이미 저장한 파일의 이름을 가져와야 한다.
//3
if(file.exists()) { //지정한 파일이 있는지 없는지 체크
file.delete(); //있으면 삭제
}
//4
//////////여기부터 파일 재 업로드/////////////////////
//파일 이름으로 업로드하면 파일이름이 겹치면 파일이 겹쳐서 사라진다.
//고유한 rename으로 변경해주어야 한다.
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
String boardRename = sdf.format(new Date(System.currentTimeMillis()))+"."+boardFilename.substring(boardFilename.lastIndexOf(".")+1);
reloadFile.transferTo(new File(savedPath + "\\" + boardRename));
board.setBoardFile(boardFilename);
board.setBoardRename(boardRename);
board.setBoardFildpath(savedPath + "\\" + boardRename);
}
int result = bService.modifyBoardOneByNo(board);
mv.setViewName("redirect:/board/detail.kh?boardNo="+board.getBoardNo());
}catch (Exception e) {
mv.addObject("mgs",e.getMessage());
mv.setViewName("/common/errorPage");
}
return mv;
}
@RequestParam(value="reloadFile", required=false) MultipartFile reloadFile
업로드한 파일의 이름을 변수로 초기화 해주고 업로드한 파일이 있는지 없는지 체크한다.
String boardFilename = reloadFile.getOriginalFilename();
if(reloadFile != null && !boardFilename.equals(""))//새로 파일을 올렸을때, 이름이 없는 파일이 있을 경우를 생각해 null체크 2번함
{//수정 할경우 대체/ 삭제 후 등록/ 대체는 어려워서 삭제후 등록으로 한다
String root = request.getSession().getServletContext().getRealPath("resources");// 저장된 파일의 경로를 가져온다.
String savedPath = root + "\\buploadFiles"; //가져온 경로에 업로드 파일이 들어있는 폴더의 경로까지 더해줌
File file = new File(savedPath+"\\"+board.getBoardRename()); //이미 저장한 파일의 이름을 가져와야 한다.
file에 있는 이전 파일이 있는지 없는지 체크하고 있으면 삭제한다.
if(file.exists()) { file.delete(); }
새롭게 올린 파일을 다시 저장해준다.
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
String boardRename = sdf.format(new Date(System.currentTimeMillis()))+"."+boardFilename.substring(boardFilename.lastIndexOf(".")+1);
reloadFile.transferTo(new File(savedPath + "\\" + boardRename));
board.setBoardFile(boardFilename);
board.setBoardRename(boardRename);
board.setBoardFildpath(savedPath + "\\" + boardRename);
@Override
public int modifyBoardOneByNo(Board board) {
int result = bStore.updateBoardOneByNo(board, session);
return result;
}
@Override
public int updateBoardOneByNo(Board board, SqlSessionTemplate session) {
int result = session.update("BoardMapper.modifyBoard",board);
return result;
}
<update id="modifyBoard">
update board_tbl set board_title = #{boardTitle}, BOARD_CONTENTS =
#{boardContents}, B_UPDATE_DATE = default, BOARD_FILE = #{boardFile},
BOARD_FILDPATH= #{boardFildpath}, BOARD_RENAME=#{boardRename} where
BOARD_NO = #{boardNo}
</update>