스프링

 

<!--   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 ) &nbsp;&nbsp;&nbsp;
	
	<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>
	&nbsp;&nbsp;&nbsp; 파일삭제 선택  : <input type="checkbox" name="fileCheck" > &nbsp;&nbsp;&nbsp;
	<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 ) &nbsp;&nbsp;&nbsp;
	
	<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>
	&nbsp;&nbsp;&nbsp; 파일삭제 선택  : <input type="checkbox" name="fileCheck" > &nbsp;&nbsp;&nbsp;
	<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>
	

 

 

 

about author

PHRASE

Level 60  머나먼나라

진정으로 강한 사람은 치열하면서도 온화해야 한다. 또한 이상주의자이면서 현실주의자이어야 한다. -마틴 루터 킹

댓글 ( 4)

댓글 남기기

작성