-
Spring - 파일 업로드 하기Spring 2019. 2. 23. 23:08
스프링에서 파일 업로드 하기
pom.xml
먼저 pom.xml 에 dependency 를 추가합니다.
commons-io 와 commons-fileupload 를 추가합니다.<!-- https://mvnrepository.com/artifact/commons-io/commons-io --> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.6</version> </dependency> <!-- https://mvnrepository.com/artifact/commons-fileupload/commons-fileupload --> <dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.3.3</version> </dependency>
servlet-context.xml
servlet-context.xml 에 파일 업로드 객체를 설정합니다.
<!-- 파일 업로드 객체 설정 --> <beans:bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <beans:property name="maxUploadSize" value="10485760"/><!-- 10MB --> </beans:bean>
id 값을 쓰실 때 대 소문자 구분을 꼭 해주세요 p가 소문자입니다.
maxUploadSize의 크기는 마음대로 넣어주어도 되지만 꼭 계산된 값으로 넣어야 합니다.
10 * 1024 * 1024 -> 10485760form
파일 업로드를 테스트 하기 위해 간단한 jsp 파일을 만듭니다.
<form action="${pageContext.request.contextPath }/file/upload.do" method="post" enctype="multipart/form-data"> <label><input type="file" name="upload" /></label> <label><input type="file" name="upload" /></label> <input type="submit" value="업로드" /> </form>
form 태그의 enctype 속성은 multipart/form-data 로 넣어줍니다.
하나의 input 태그로 여러 개의 파일을 전송하려면 multiple 속성을 넣어줍니다.<input type="file" name="upload" multiple />
Controller
폼에서 넘긴 값을 받아오는 간단한 컨트롤러를 만듭니다.
@Controller public class FileController { @RequestMapping("/file/upload.do") public String uploadFile(MultipartFile[] upload, HttpServletRequest request) { //파일이 업로드 될 경로 설정 String saveDir = request.getSession().getServletContext().getRealPath("/resources/upload/file"); //위에서 설정한 경로의 폴더가 없을 경우 생성 File dir = new File(saveDir); if(!dir.exists()) { dir.mkdirs(); } // 파일 업로드 for(MultipartFile f : upload) { if(!f.isEmpty()) { // 기존 파일 이름을 받고 확장자 저장 String orifileName = f.getOriginalFilename(); String ext = orifileName.substring(orifileName.lastIndexOf(".")); // 이름 값 변경을 위한 설정 SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd-HHmmssSSS"); int rand = (int)(Math.random()*1000); // 파일 이름 변경 String reName = sdf.format(System.currentTimeMillis()) + "_" + rand + ext; // 파일 저장 try { f.transferTo(new File(saveDir + "/" + reName)); }catch (IllegalStateException | IOException e) { e.printStackTrace(); } } } return "uploadEnd"; } }
매개 변수의 MultipartFile 배열이 폼에서 넘어오는 파일들의 배열이다.
파일을 하나씩 이름이 중복되지 않도록 바꿔서 저장한다.테스트 하기
이미지 파일 2개를 선택했습니다.
업로드 버튼을 누르면
업로드 완료 창이 뜹니다.폴더에 파일이 잘 들어가는지 확인합니다.
새로고침을 누르니 방금 업로드한 파일이 이름이 바뀌어서 저장된 것을 확인할 수 있습니다.
반응형'Spring' 카테고리의 다른 글
Spring - 트랜잭션 처리하기 (0) 2019.02.25 Spring - 파일 다운로드 하기 (0) 2019.02.25 Spring - MyBatis 설정하기 (0) 2019.02.20 Spring - 설정하기 (0) 2019.02.20 Spring - log4j 사용하기 (0) 2019.02.20