일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- SQL
- 과정평가형
- HTML
- git
- Java
- oracle
- jQuery
- github
- Oracle SQL
- 모조칼럼
- group by
- Oracle DB
- 성적프로그램
- distinct
- 이클립스
- CRUD
- HTTP Status 404
- 한글 인코딩
- 답변형 게시판
- JavaScript
- rownum
- ||
- sql developer
- 부트스트랩
- HTTP Status 500
- alias
- 제약조건
- JSP
- Bootstrap
- tomcat
Archives
초급의 끄적거림
[Spring] 파일 다운로드/업로드 (수정, 삭제) 본문
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>
'Framework > Spring' 카테고리의 다른 글
[Spring] project configuration is not up-to-date with pom.xml (0) | 2020.04.12 |
---|---|
[Spring] 런타임과 컴파일타임의 차이 (0) | 2020.03.08 |
[Spring] 파일 다운로드/업로드 게시판 (등록, 목록, 상세보기) (0) | 2019.10.18 |
[Spring] 파일 업로드 게시판 (0) | 2019.10.17 |
[Spring] AJAX 2 / 아이디 중복확인 / 쿠키 생성 (0) | 2019.10.17 |
Comments