<!-- ckeditor 연결 -->
<script type="text/javascript" src="/ckeditor/ckeditor.js"></script>
<div class="bg-content">
<!--============================== content =================================-->
<div class="container" >
<h3>게시판 수정하기 </h3>
<form name="form1" role="form1" method="post" enctype="multipart/form-data" >
<div class="table-responsive">
<table class="table table-bordered table-striped" style="background-color: white; margin: 10px 0 10px 0;">
<colgroup>
<col class="col-lg-1">
<col class="col-lg-7"></colgroup>
<thead>
<tr class="alt">
<td><code>항목</code> </td>
<td><code>클래스</code> </td>
</tr>
</thead>
<tbody id="divList" style="margin-bottom: 30px;">
<tr>
<td>번호</td>
<td>${view.idx}</td>
</tr>
<tr>
<td>글쓴이</td>
<td>${view.username}</td>
</tr>
<tr>
<td>제목</td>
<td class="span12">
<input type="text" value="${view.subject }" name="subject">
</td>
</tr>
<tr>
<td>내용</td>
<td class="span12">
<textarea rows="5" class="form-control" name="content">${view.content }</textarea>
<!-- textarea 를 ckeditor 로 변경 시킴 -->
<script>
CKEDITOR.replace("content", {
filebrowserUploadUrl :"/imageUpload.do"
// filebrowserImageUploadUrl: 'MacaronicsServlet?command=ckeditor_upload'
});
</script>
</td>
<tr>
<td>날짜</td>
<td>${view.post_date}</td>
</tr>
<tr>
<td>조회수</td>
<td>${view.hit}</td>
</tr>
<tr>
<td>파일</td>
<td>
<c:if test="${ not empty view.fileName }">
${ view.fileName.substring(view.fileName.lastIndexOf("-")+1) } ( ${view.filesize } bytes )
<a href="/board/down.do?idx=${view.idx }&fileName=${view.fileName }"> <img src="/resources/template/img/file.png"/></a>
<input type="hidden" name="oldFileName" value="${view.fileName }" >
<input type="hidden" name="oldFileSize" value="${view.filesize }" >
</c:if>
파일삭제 선택 : <input type="checkbox" name="fileCheck" >
<input type="file" name="file1" class="form-control">
</td>
</tr>
</tbody>
<tfoot>
<tr>
<td colspan="2" style="text-align: center;">
<a href="/board/listPage" class="btn btn-info">목록 보기</a>
<input type="hidden" value="${view.idx}" name="idx" />
<input type="hidden" value="${view.ref}" name="ref" />
<input type="hidden" value="${view.reorder}" name="reorder" />
<button class="btn btn-warning" type="button" id="btnUpdate">수정 하기</button>
</td>
</tr>
</tfoot>
</table>
</div>
</form>
<hr>
</div>
</div>
<script type="text/javascript">
$(document).ready(function(){
$("#btnUpdate").click(function(){
document.form1.action="/board/board_update.do";
document.form1.submit();
});
});
</script>
뷰에서 기존 파일을 oldFileName 으로 설정 한다. 파일 삭제 체크박스 추가
<td>
<c:if test="${ not empty view.fileName }">
${ view.fileName.substring(view.fileName.lastIndexOf("-")+1) } ( ${view.filesize } bytes )
<a href="/board/down.do?idx=${view.idx }&fileName=${view.fileName }"> <img src="/resources/template/img/file.png"/></a>
<input type="hidden" name="oldFileName" value="${view.fileName }" >
<input type="hidden" name="oldFileSize" value="${view.filesize }" >
</c:if>
파일삭제 선택 : <input type="checkbox" name="fileCheck" >
<input type="file" name="file1" class="form-control">
</td>
또한 DTO 에도 추가를 한다. fileCheck, oldFileName, oldFileSize
@Data
public class BoardDTO {
private int idx;
private String userid;
private String username;
private String subject;
private String content;
private int hit;
private Date post_date;
private String fileName;
private long filesize;
private int down;
private int ref;
private int depth ;
private int reorder;
private int comment_count;
private String fileCheck;
private String oldFileName;
private long oldFileSize;
private MultipartFile file1;
}
1.업로드 파일이 없을 경우
- 1-1 체크박스로 기존 업로드 파일을 삭제 할 경우
- 1-1-1 기존 게시물 그대로 사용할 경우
- 1-1-2 업로드 파일도 없고 체크박스도 없고 기존 게시물이 없을 경우
2. 업로드 파일 있을 경우 체크박스 상관없이 그리고 기존 파일 상관 없이 무조건 업로드
/*
1.업로드 파일이 없을 경우
- 1-1 체크박스로 기존 업로드 파일을 삭제 할 경우
- 1-1-1 기존 게시물 그대로 사용할 경우
- 1-1-2 업로드 파일도 없고 체크박스도 없고 기존 게시물이 없을 경우
2. 업로드 파일 있을 경우 체크박스 상관없이 그리고 기존 파일 상관 없이 무조건 업로드
*/
//게시물 수정하기
@RequestMapping(value="/board_update.do", method=RequestMethod.POST)
public String board_update(@ModelAttribute BoardDTO dto, HttpServletRequest request, Model model){
logger.info("//게시물 수정하기");
//입력 값이 없을 경우
if(dto.getSubject().trim().length() ==0){
logger.info("입력 값이 없을 경우");
model.addAttribute("view", boardService.boardView(dto.getIdx()));
return "/board/update_view";
}else{
//입력 값이 있을 경우
logger.info("입력 값이 있을 경우" +dto.toString());
String fileName ="";
long fileSize=0;
MultipartFile file1 =dto.getFile1();
UploadPath.attach_path="WEB-INF/uploads";
String uploadDir =UploadPath.path(request);
if(file1.isEmpty() ){
logger.info("1.업로드 파일이 없을 경우");
if(dto.getFileCheck()!= null && dto.getFileCheck().equals("on") ){
logger.info("1-1 체크박스로 기존 업로드 파일을 삭제 할 경우");
//이미지 인지 확인 후 이미지 이면 원본 이미지도 삭제
int num =dto.getOldFileName().lastIndexOf(".") +1 ;
String imageConfirm =dto.getOldFileName().substring(num);
logger.info(imageConfirm);
if(MediaUtils.imageMatch(imageConfirm )){
//이미파일 이다. 따라서 원본 이미지도 삭제
// /2016/12/27/s_55d9b836-ebaa-49f6-82b8-a2488ebe3740_page1-img5.jpg
String front =dto.getOldFileName().substring(1, 12);
String end=dto.getOldFileName().substring(14);
String originalImageName=front+ end;
logger.info("원본 이미지 : " +originalImageName );
File oldFile2 =new File(uploadDir+File.separator+originalImageName.replace('/', File.separatorChar));
if(oldFile2.exists()){
oldFile2.delete();
}
}
File oldFile =new File(uploadDir+dto.getOldFileName());
if(oldFile.exists()){
oldFile.delete();
}
dto.setFileName("");
dto.setFilesize(0);
boardService.boardUpdate(dto);
//list.do 로 이동
return "redirect:listPage";
}else{
if(dto.getOldFileName()!=null){
logger.info("- 1-1-1 기존 게시물 그대로 사용할 경우 체크박스 확인" + dto.getFileCheck());
logger.info("1. 기존의 파일을 이름 : " + dto.getOldFileName());
dto.setFileName(dto.getOldFileName());
dto.setFilesize(dto.getOldFileSize());
boardService.boardUpdate(dto);
//list.do 로 이동
return "redirect:listPage";
}else{
logger.info("- 1-1-2 업로드 파일도 없고 체크박스도 없고 기존 게시물이 없을 경우 ");
boardService.boardUpdate(dto);
return "redirect:listPage";
}
}
}
if(!file1.isEmpty()){
logger.info("2. 업로드 파일이 존재 할 경우");
//기존 파일 있는지 여부 확인 후 기존파일 삭제
if(dto.getOldFileName()!=null){
logger.info(" 기존 파일 이름 :" + dto.getOldFileName());
//이미지 인지 확인 후 이미지 이면 원본 이미지도 삭제
int num =dto.getOldFileName().lastIndexOf(".") +1 ;
String imageConfirm =dto.getOldFileName().substring(num);
logger.info(imageConfirm);
if(MediaUtils.imageMatch(imageConfirm )){
//이미파일 이다. 따라서 원본 이미지도 삭제
// /2016/12/27/s_55d9b836-ebaa-49f6-82b8-a2488ebe3740_page1-img5.jpg
String front =dto.getOldFileName().substring(1, 12);
String end=dto.getOldFileName().substring(14);
String originalImageName=front+ end;
logger.info("원본 이미지 : " +originalImageName );
File oldFile2 =new File(uploadDir+File.separator+originalImageName.replace('/', File.separatorChar));
if(oldFile2.exists()){
oldFile2.delete();
}
}
File oldFile =new File(uploadDir+dto.getOldFileName());
if(oldFile.exists()){
oldFile.delete();
}
}
fileName=file1.getOriginalFilename();
fileSize=file1.getSize();
try {
logger.info("업로드 ");
fileName=UploadFileUtils.uploadFile(uploadDir, fileName, file1.getBytes());
dto.setFileName(fileName);
dto.setFilesize(fileSize);
boardService.boardUpdate(dto);
} catch (Exception e) {
// TODO: handle exception
e.getStackTrace();
logger.info("업로드 오류");
}
//list.do 로 이동
return "redirect:listPage";
}
// 그밖의 경우 다시 수정 화면으로 이동
model.addAttribute("view", boardService.boardView(dto.getIdx()));
return "/board/update_view";
}
}
Mapper.xml
<!-- 업데이트 하기 -->
<update id="boardUpdate">
update board set subject =#{subject}, content =#{content} , fileName=#{fileName}, filesize=#{filesize}
where idx =#{idx}
</update>
댓글 ( 4)
댓글 남기기