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>
