스프링 2.5 파일업로드
1. dispatcher-servlet.xml
○ multipartResolver : 스프링에서 제공
○ 파일 업로드를 하려면 다음 객체를 추가해줘야한다.
○ defaultEncdoing : 파일처리 방식
○ maxUploadSize : 파일 최대 크기
<!-- 파일처리 UTF-8로 하겠다. 최대 크기는 10M -->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="defaultEncoding" value="UTF-8"/>
<property name="maxUploadSize" value="10000000"/>
</bean>
2. FileUploadCommand.java
package com.fileUpload;
import org.springframework.web.multipart.MultipartFile;
public class FileUploadCommand {
private int listNum;
private int num;
private String saveFileName;
private String originalFileName;
//getter & setter
}
3. FileUploadController.java
① 객체 생성
@Controller("sfile.fileUploadController")
public class FileUploadController {
@Resource(name="dao")
private CommonDAO dao;
@Resource(name="myUtil")
private MyUtil myUtil;
}
② 파일 업로드
○ 업로드 창
- created.action이 오면 입력창을 띄우는 역할
@RequestMapping(value="/sfile/created.action", method={RequestMethod.GET,RequestMethod.POST})
public String uploadForm() throws Exception{
return "fileUpload/write";
}
○ 파일 업로드
- MultipartFile file = request.getFile("upload");
upload : 입력창에서 <input type="file">의 name
- FileManager.doFileUpload(file.getInputStream(),file.getOriginalFilename(),savePath);
파일 업로드 및 저장 파일 이름 변경
@RequestMapping(value="/sfile/upload.action", method={RequestMethod.GET,RequestMethod.POST})
public String fileUpload(FileUploadCommand command, MultipartHttpServletRequest request, HttpSession session) throws Exception{
String root = session.getServletContext().getRealPath("/");
String savePath = root + "\\pds\\sdata";
FileUploadCommand dto = (FileUploadCommand)command;
MultipartFile file = request.getFile("upload");
String saveFileName = FileManager.doFileUpload(file.getInputStream(),file.getOriginalFilename(),savePath);
dto.setSaveFileName(saveFileName);
dto.setOriginalFileName(file.getOriginalFilename());
command.setNum(dao.getIntValue("sfile.maxNum")+1);
dao.insertData("sfile.insertData", dto);
return "redirect:/sfile/list.action";
}
③ 파일 다운로드
○ 리턴값이 null인 이유 : 페이지를 이동할 필요가 없기 때문
@RequestMapping(value="/sfile/download.action", method={RequestMethod.GET,RequestMethod.POST})
public String download(HttpServletRequest request, HttpServletResponse response) throws Exception{
int num = Integer.parseInt(request.getParameter("num"));
// ① 파일 정보를 가져온다
FileUploadCommand dto = (FileUploadCommand)dao.getReadData("sfile.getReadData",num);
HttpSession session = request.getSession();
// ② 다운받을 파일 위치 설정
String root = session.getServletContext().getRealPath("/");
String savePath = root + "\\pds\\sdata";
// ③ 파일 다운로드
FileManager.doFileDownload(dto.getSaveFileName(), dto.getOriginalFileName(), savePath, response);
return null;
}
④ 파일 삭제
@RequestMapping(value="/sfile/deleted.action", method={RequestMethod.GET,RequestMethod.POST})
public String deleted(HttpServletRequest request, HttpServletResponse response) throws Exception{
// ① 삭제할 게시판 번호
int num = Integer.parseInt(request.getParameter("num"));
HttpSession session = request.getSession();
// ② 실제 물리적인 파일 삭제 위치 설정
String root = session.getServletContext().getRealPath("/");
String savePath = root + "\\pds\\sdata";
String pageNum = request.getParameter("pageNum");
FileUploadCommand dto = (FileUploadCommand)dao.getReadData("sfile.getReadData",num);
// ③ 물리적인 파일 삭제
FileManager.doFileDelete(dto.getSaveFileName(), savePath);
// ④ DB 내용 삭제
dao.deleteData("sfile.deleteData", num);
session.setAttribute("pageNum", pageNum);
return "redirect:/sfile/list.action";
}
⑤ 리스트 화면
○ 페이징 처리
- myUtil 사용
@RequestMapping(value="/sfile/list.action", method={RequestMethod.GET,RequestMethod.POST})
public String list(FileUploadCommand command, HttpServletRequest request, HttpServletResponse response) throws Exception{
String cp = request.getContextPath();
//페이징 처리(생략)
request.setAttribute("lists", lists);
request.setAttribute("pageNum", pageNum);
request.setAttribute("totalPage",totalPage);
request.setAttribute("totalDataCount", totalDataCount);
request.setAttribute("pageIndexList", myUtil.pageIndexList(currentPage, totalPage, urlList));
return "fileUpload/list";
}
3. jsp 파일 작성
① write.jsp
○ 파일을 업로드하는 페이지
◈ script 부분
<script type="text/javascript">
function sendIt(){
f = document.myForm;
str = f.upload.value;
if(!str) {
alert("파일을 첨부해주세요");
f.upload.focus();
return;
}
f.action = "<%=cp%>/sfile/upload.action";
f.submit();
}
</script>
◈ body 부분
<body>
<form action="" name="myForm" method="post" enctype="multipart/form-data" >
파일:<input type="file" name="upload"><br/>
<input type="hidden" name="mode" value="save"/>
<input type="submit" value="파일업로드" onclick="sendIt();">
</form>
</body>
② list.jsp
○ 파일 리스트 페이지
<body>
<div id="bbsList">
<div id="bbsList_title">
파일업로드
</div>
<div id="bbsList_header">
<div id="rightHeader">
<input type="button" value=" 글올리기 " class="btn2" onclick="javascript:location.href='<%=cp %>/sfile/created.action';"/>
</div>
</div>
<div id="bbsList_list">
<div id="title">
<dl>
<dt class="num">번호</dt>
<dt class="originalFileName">originalFileName</dt>
<dt class="fileDownload">파일 다운로드</dt>
<dt class="deleted">삭제</dt>
</dl>
</div>
<div id="lists">
<c:forEach var="dto" items="${lists }">
<dl>
<dd class="num">${dto.listNum }</dd>
<dd class="originalFileName">${dto.originalFileName }</dd>
<dd class="fileDownload">
<a href="<%=cp%>/sfile/download.action?num=${dto.num}">
${dto.saveFileName }
</a>
</dd>
<dd class="deleted">
<a href="<%=cp%>/sfile/deleted.action?num=${dto.num}&pageNum=${pageNum}">[삭제]</a>
</dd>
</dl>
</c:forEach>
</div>
<div id="footer">
<c:if test="${totalDataCount==0 }">
데이터가 없습니다.
</c:if>
<c:if test="${totalDataCount!=0 }">
${pageIndexList }
</c:if>
</div>
</div>
</div>
</body>
'STUDY > SPRING' 카테고리의 다른 글
스프링(3.0) 다운로드 (0) | 2019.04.15 |
---|---|
[spring 2.5]타일즈 (0) | 2019.04.09 |
[spring 2.5]게시판 (0) | 2019.04.08 |
[spring 2.5]어노테이션을 사용한 스프링 기초예제 (0) | 2019.04.08 |
[spring 2.5]스프링 간단한 예제(2) (0) | 2019.04.07 |
댓글