초급의 끄적거림

[Spring] 파일 다운로드/업로드 (수정, 삭제) 본문

Framework/Spring

[Spring] 파일 다운로드/업로드 (수정, 삭제)

codingD 2019. 10. 20. 18:22

1. 파일 다운로드/업로드 수정

- list.jsp의 '수정' 버튼에 onclick 만들어주기
- '수정' 은 각 글마다 적용되기 때문에 mediano가 필요

<수정 방식>
- 파일사이즈가 0보다 클 때만 수정
  : 기존에 들어가있던 파일을 삭제하고 신규파일 저장

MediaCont.java

//-----------------------------------글 수정 1) get방식, 2) post 방식----------------------------------------------------------------
//수정은 원래 있던 글을 한 번 다시 가져와야 하기 때문에 앞에서 만든 read를 활용하여 읽어오기
//get 방식으로 이전에 적힌 내용을 가져올 수 있게 updateform을 받아오는 것
@RequestMapping(value = "/media/update.do", method=RequestMethod.GET)
public ModelAndView updateForm(MediaDTO dto) {
	ModelAndView mav=new ModelAndView();
	mav.setViewName("media/updateForm");
	mav.addObject("dto", dao.read(dto.getMediano()));
	return mav;
}//updateForm() end

@RequestMapping(value = "/media/update.do", method = RequestMethod.POST)
public ModelAndView updateProc (MediaDTO dto, HttpServletRequest req) {
	ModelAndView mav=new ModelAndView();
	mav.setViewName("media/msgView");
	String basePath=req.getRealPath("/media/storage");
	
	//수정 전 저장된 기존의 정보 가져오기
	MediaDTO oldDTO=dao.read(dto.getMediano());
//---------------------------------------------------------------------------------------------------------------------------
	//파일을 수정할 것인가?
	MultipartFile posterMF=dto.getPosterMF();  //우선 파일을 가져옴
	if(posterMF.getSize()>0) {
		//파일이 전송된 경우 (0보다 큼)
		//기존 파일 삭제 (수정이 되면 기존에 전송했던 파일을 삭제하고 새로운 파일을 전송해야 함)
		UploadSaveManager.deleteFile(basePath, oldDTO.getPoster());	//Utility 에서 (지울 곳의 경로, 먼저 저장한 파일명)
		
		//신규파일 저장
		String poster=UploadSaveManager.saveFileSpring30(posterMF, basePath);  //Utility 에서 (신규 파일, 경로)
		dto.setPoster(poster);
	}else {
		//파일이 전송되지 않는 경우
		dto.setPoster(oldDTO.getPoster());
	}//if end
	
	//2)
	MultipartFile filenameMF=dto.getFilenameMF();
	if(filenameMF.getSize()>0) {
		UploadSaveManager.deleteFile(basePath, oldDTO.getFilename());
		String filename=UploadSaveManager.saveFileSpring30(filenameMF, basePath);
		dto.setFilename(filename);
		dto.setFilesize(filenameMF.getSize());
	}else {
		dto.setFilename(oldDTO.getFilename());
		dto.setFilesize(oldDTO.getFilesize());
	}//if end
//---------------------------------------------------------------------------------------------------------------------------
	int cnt=dao.update(dto);
	if(cnt==0) {  //에러가 나거나 잘 보이지 않는다면 '페이지 소스보기' 이용하기
		mav.addObject("msg1", "<p>음원수정 실패T.T</p>");
		mav.addObject("img", "<img src='../images/fail.png'>");
		mav.addObject("link1", "<input type='button' value='목록으로' onclick='location.href=\"list.do\"'>");
		mav.addObject("link2", "<input type='button' value='다시시도' onclick='javascript:history.back()'>");
	}else {
		mav.addObject("msg1", "<p>음원수정 성공!</p>");
		mav.addObject("img", "<img src='../images/sound.png'>");
		mav.addObject("link1", "<input type='button' value='목록으로' onclick='location.href=\"list.do\"'>");
	}//if end
		return mav;		
	}//updateProc() end

 

MediaDAO.java

public int update(MediaDTO dto) {
	int cnt=0;
	try{
		Connection con=DBOpen.getConnection();
		StringBuilder sql=new StringBuilder();
		
		sql.append(" UPDATE media ");
		sql.append(" SET title=?, poster=?, filename=?, filesize=? ");
		sql.append(" WHERE mediano=? ");
		
		PreparedStatement pstmt=con.prepareStatement(sql.toString());
		pstmt.setString(1, dto.getTitle());
		pstmt.setString(2, dto.getPoster());
		pstmt.setString(3, dto.getFilename());
		pstmt.setLong(4, dto.getFilesize());
		pstmt.setInt(5, dto.getMediano());
		
		cnt=pstmt.executeUpdate();
	}catch(Exception e) {
		System.out.println("수정 실패 : "+e);
	}//try end
	return cnt;
}//update() end

 

updateForm.jsp

 - createForm.jsp 복사해서 수정

 - hidde 타입으로 mediano 불러오기

 - action ="./update.do" 로 수정

 - value 등에 ${ } 형식으로 불러온 값을 넣어줌

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>	
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>	
<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>media/updateForm.jsp</title>
  <style type="text/css">
  *{
    font-family: gulim;
    font-size: 20px;
  }
  </style>
  <link href="../css/style.css" rel="stylesheet" type="text/css">
</head>
<body>
  <div class="title">음원 수정</div>
  <form method="post"
        action="./update.do"
        enctype="multipart/form-data" >
     <input type="hidden" name="mediano" value="${dto.mediano }">
    <table align="center" border="1px" cellspacing="0px" cellpadding="5px">
    <tr>
      <th>제목</th>
      <td><input type="text" name="title" size="50" value="${dto.title }"></td>    
    </tr>
    <tr>
      <th>포스터</th>
      <td>
		<img src="storage/${dto.poster }" width="100">
		<br>      	
      	<input type="file" name="posterMF" size="50">
      </td>    
    </tr>
    <tr>
      <th>미디어 파일</th>
      <td>
       	등록된 파일 : ${dto.filename }
      	<input type="file" name="filenameMF" size="50">
      </td>    
    </tr>    
  </table>    

  <div class="bottom">
    <input type="submit" value="수정">
    <input type="button" value="음원목록">
  </div>
  
  </form>
</body>
</html>

 

2. 삭제


MediaCont.java

//------------------- 글 삭제 --------------------------------------------------------------------------------	
	@RequestMapping(value = "/media/delete.do", method = RequestMethod.GET)
	public ModelAndView deleteForm(MediaDTO dto){
		ModelAndView mav=new ModelAndView();
		mav.setViewName("media/deleteForm");
		mav.addObject("root", Utility.getRoot());
		
		//삭제관련 정보 가져오기
		mav.addObject("dto", dao.read(dto.getMediano()));
		return mav;
	}//deleteForm() end
	
	@RequestMapping(value = "/media/delete.do", method = RequestMethod.POST)
	public ModelAndView delete(MediaDTO dto, HttpServletRequest req) {
		ModelAndView mav=new ModelAndView();
		mav.setViewName("media/msgView");
		mav.addObject("root", Utility.getRoot());
		
		//삭제하고자 하는 정보 가져오기
		MediaDTO oldDTO=dao.read(dto.getMediano());
		
		int cnt=dao.delete(dto.getMediano());
		if(cnt==0) {
            mav.addObject("msg1",  "<p>음원파일 삭제 실패!!</p>");
            mav.addObject("img",   "<img src='../images/fail.png'>");
            mav.addObject("link1", "<input type='button' value='다시시도' onclick='javascript:history.back()'>");
            mav.addObject("link2", "<input type='button' value='음원목록' onclick='location.href=\"./list.do\"'>");
        }else {
           //관련 파일 삭제
            String basepath = req.getRealPath("/media/storage");
            UploadSaveManager.deleteFile(basepath, oldDTO.getPoster());
            UploadSaveManager.deleteFile(basepath, oldDTO.getFilename());       
            mav.addObject("msg1",  "<p>음원파일이 삭제 되었습니다</p>");
            mav.addObject("img",   "<img src='../images/sound.png'>");
            mav.addObject("link1", "<input type='button' value='음원목록' onclick='location.href=\"./list.do\"'>");     
        }//if end    
		return mav;		
	}//delete() end

 

MediaDAO.java

public int delete(int mediano) {
	int cnt=0;
	try{
		Connection con=DBOpen.getConnection();
		StringBuilder sql=new StringBuilder();
		
		sql.append(" DELETE FROM media ");
		sql.append(" WHERE mediano=? ");
		
		PreparedStatement pstmt=con.prepareStatement(sql.toString());
		pstmt.setInt(1, mediano);
		cnt=pstmt.executeUpdate();
		
	}catch(Exception e) {
		System.out.println("삭제 실패 : "+e);
	}//try end
	return cnt;
}//delete() end

 

deleteForm.jsp

<%@ page contentType="text/html; charset=UTF-8" %> 
<!DOCTYPE html> 
<html> 
<head> 
  <meta charset="UTF-8"> 
  <title>media/deleteForm.jsp</title> 
  <style type="text/css"> 
  *{ 
    font-family: gulim; 
    font-size: 24px; 
  } 
  </style> 
  <link href="../css/style.css" rel="stylesheet" type="text/css">
</head> 
<body>
  <div class="title">음원 삭제</div>
  
  <form method="post" action="./delete.do">
	<input type="hidden" name="mediano" value="${dto.mediano }">
	
	<div class="content">
		<p>음원을 삭제하시겠습니까?</p>
		<p>※ 관련 미디어 파일(mp3, mp4)도 전부 삭제됩니다</p>
	</div>
	
	<div class="bottom">
		<input type="submit" value="삭제진행">
		<input type="button" value="음원목록"  onclick="location.href='./list.do'">
	</div>
  </form>

</body> 
</html> 

 

Comments