본문 바로가기
STUDY/SPRING

[spring 2.5]파일 업로드

by Anne of Green Galbes 2019. 4. 9.

스프링 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

댓글