필요한 jar파일은 다음과 같다.
- commons-fileupload-1.2.jar - commons-io-1.3.jar |
2. Spring Bean설정.
아래와 같이 CommonsMultipartResolver를 추가해준다.
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <property name="maxUploadSize" value="30720000" /> </bean> |
그리고 컨트룰러 등록. 여기서 업로드 기본디렉토리를 설정해준다.
<bean id="cpnupload" class="net.tino.controller.cpOper.CpnUploadController"> <property name="uploadDir" value="E://COUPONE" /> </bean> |
3. 업로드폼
주의할점은... enctype="multipart/form-data"를 반드시 명시해야 한다는점은 왠만하면 다 알고있을터... method="post"도 반드시 명시해줘야하고, 필드명에 반드시 name도 명시를
해주어야 한다는것이다. 컨트룰러에서 value를 name을 인식해서 가져오는거같다.(보통 난 폼 컨트롤할때 id를 쓰는데... 이거 때문에 삽질좀 했다 ㅡ_ㅡ;;;)
<%@ page language="java" contentType="text/html; charset=EUC-KR" pageEncoding="EUC-KR"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> <%@ taglib uri="http://www.springframework.org/tags" prefix="spring"%> <%@ taglib uri="http://www.springframework.org/tags/form" prefix="form"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%> <html> <head> <meta http-equiv="content-type" content="text/html; charset=euc-kr"> <title>ㄷㄷㄷ;;;</title> <script language="javascript" src="../scripts/inc_util.js"></script> <script language="JavaScript"> function upload(){ var fileName = str_trim(document.frm.f1.value); var arr=("file:///"+fileName.replace(/ /gi,"%20").replace(/\\/gi,"/")).split("/"); var chkFile = arr[arr.length-1]; var len = chkFile.length; var codeLen = 0; for (i=0; i < len; i++) (chkFile.charCodeAt(i) > 255)? codeLen+=2:codeLen++; if (len != codeLen) { alert("한글 파일은 업로드 할 수 없습니다."); return false; } if(fileName.length == 0 && fileName.length == 0){ alert("업로드할 파일을 선택하십시오."); document.frm.f1.focus(); return false; } else { document.frm.submit(); } } </script> </head> <body> <center> <form name="frm" action="../cpnupload/insert.html" method="post" enctype="multipart/form-data" > <input type="file" id="f1" name="f1" size="30"/> <input type="button" style="width:80" value="확인" onclick="javascript:upload();"> </form> ${resultMessage } </center> </body> </html> |
4. 컨트룰러 제작
import java.io.File; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.log4j.Logger; import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartHttpServletRequest; import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.mvc.multiaction.MultiActionController; public class CpnUploadController extends MultiActionController { private Logger logger = Logger.getLogger(CpnUploadController.class); private File uploadDir; public void setUploadDir(File uploadDir) { this.uploadDir = uploadDir; } public ModelAndView insert(HttpServletRequest request, HttpServletResponse response) throws Exception { logger.debug("### CpnUploadController - insert()"); String resultMessage = ""; response.setContentType("text/plain"); if (! (request instanceof MultipartHttpServletRequest)) { response.sendError(HttpServletResponse.SC_BAD_REQUEST, "Expected multipart request"); return null; } MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request; // 빈 업로드디렉토리 설정해 둔위치에 위치에 파일을 저장 MultipartFile imgFile = multipartRequest.getFile("f1"); // request의 "f1"을 찾아 file객체에 세팅한다. final String imgFileName = imgFile.getOriginalFilename().trim(); String filePath = uploadDir.getAbsolutePath() + File.separator; // 여기에 파일 중복 체크 추가 // 용량 체크 long fileSize = imgFile.getSize(); if(fileSize > 20480000 || fileSize <= 0) { resultMessage = "20MB 이상의 파일은 업로드 할 수 없습니다."; } // 확장자 체크 int pathPoint = imgFileName.lastIndexOf("."); String filePoint = imgFileName.substring(pathPoint + 1, imgFileName.length()); String fileType = filePoint.toLowerCase(); if(!fileType.equals("jpg") && !fileType.equals("bmp") && !fileType.equals("gif")) { resultMessage = "이미지 파일만 업로드 가능합니다."; } // 파일을 지정한 위치에 upload File f = new File(filePath + "64"); if(!f.exists()) { f.mkdirs(); // 디렉토리 생성 } String finalFnm = filePath + "64" + File.separator + imgFileName; logger.debug("finalFnm = " + finalFnm); imgFile.transferTo(new File(finalFnm)); resultMessage = "정상적으로 업로드 하였습니다."; resultMessage += "\n저장된 파일 => " + finalFnm; // 여기서 DB에 파일을 포함한 쿠폰정보 저장 logger.debug("resultMessage = "+resultMessage); ModelAndView mav = new ModelAndView("redirect:uploadForm.html"); mav.addObject("resultMessage", resultMessage); return mav; } public ModelAndView uploadForm(HttpServletRequest request, HttpServletResponse response) { logger.debug("### CpnUploadController - uploadForm()"); ModelAndView mav = new ModelAndView("/cpOper/cpn_upload"); String resultMessage = request.getParameter("resultMessage"); logger.debug("resultMessage = "+resultMessage); mav.addObject("resultMessage", resultMessage); return mav; } } |
'OpenSource > Spring' 카테고리의 다른 글
어노테이션을 이용한 스프링MVC에서 인터셉터 설정 (0) | 2010.05.26 |
---|---|
Spring DataSource설정 (DB설정) (0) | 2010.02.17 |
Spring 컨트룰러 작업시 ControllerClassNameHandlerMapping을 사용할경우 주의사항! (0) | 2010.02.01 |
간단한 Spring MVC설정(ControllerClassNameHandlerMapping) (0) | 2009.11.18 |
스프링 컨트롤러에서 컨트롤러로 리다이렉트 (0) | 2009.09.07 |