티스토리 뷰
1. CommonsMultipartResolver 를 이용한 파일 업로드
- CommsMultipartResolver 빈을 설정하여 파일 업로드를 처리할 수 있다.
- MultipartFile 클래스를 이용하여 업로드한 파일 정보를 얻는다
- JSP 파일의 Enctype 을 multipart/form-data로 설정한다
- commons-fileupload, commons-io jar 파일이 있어야 한다.
pom.xml 확인
- commons-fileupload, commons-io 가 있는지 확인한다.
mavenrepository.com 에서 필요한 라이브러리 파일을 검색한다.
commons-fileupload 에 coomons-io 가 연결되어 있다.
1 2 3 4 5 6 7 8 9 10 11 | <dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.2.1</version> </dependency> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>1.4</version> </dependency> |
bbs의 bean 설정 파일인
servlet-context.xml 에 multipartresolver bean 설정을 한다
1 | <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"/> |
다음은 파일 업로드를 구현하기 위해 VO(DTO) 를 약간 수정한다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | private String fname; private MultipartFile uploadFile; public BoardVO() { } public String getFname() { return fname; } public void setFname(String fname) { this.fname = fname; } public MultipartFile getuploadFile() { return uploadFile; } public void setuploadFile(MultipartFile uploadFile) { this.uploadFile = uploadFile; } |
기존의 VO에서 파일 업로드를 위해 MultipartFile uploadFile 변수를 추가로 생성하고, getter / setter 를 만든다
여기서 기존에 JSP 에서 파일 업로드 input type="file" 에서 명칭인 fname 을 uploadFile 로 바꾼다. ( 그러면 ModelAttribute 에서 article MultipartFile uploadFile 변수에 저장되어 넘겨 받을 수 있다 )
JSP Form 에 enctype="multipart/form-data" 를 추가한다.
이제 폼에서 작성된 내용을 저장하는 Controll 소스 코드를 살펴본다.
@RequestMapping("/write.ktds") public ModelAndView write(HttpServletRequest req, @ModelAttribute("article") BoardVO article) throws IllegalStateException, IOException { session = req.getSession(); // 주의할점 // MultipartResolver는 파일이 업로드 되지 않을 경우 null 을 리턴하는 것이 아니라 // "" (공백) 을 티런해줌 그래서 파일업로드를 하지 않아도 NullPointerException이 발생하지 않음 MultipartFile uploadfile = article.getuploadFile(); // 여기서는 Null String fname = uploadfile.getOriginalFilename(); // 여기서는 "" if (fname.equals("")) { article.setFname(null); } else { article.setFname(fname); // 1. FileOutputStream 사용 // byte[] fileData = file.getBytes(); // FileOutputStream output = new FileOutputStream("C:/images/" + // fileName); // output.write(fileData); // 2. transferTo 함수 사용 uploadfile.transferTo(new File("d:/upload/" + fname)); } article.setId((String) session.getAttribute("id")); bbsService.write(article); return new ModelAndView("redirect:list.ktds"); }
@ModelAttribute("article") 을 통해 writeForm.jsp 에서 작성된 내용이 넘어온다.
article 변수에 현재 fname의 값은 null 이고 uploadFile 에 파일 정보가 넘어왔다.
먼저 getter 를 통해 uploadfile이라는 변수에 담고, 파일의 파일 명을 getOriginalFilename() 함수를 통해 받고, 현재 null 인 article의 fname 에 setter를 통해 파일 이름을 심는다.
MultipartFile 클래스의 transferTo 함수를 통해 간단하게 파일 전송을 할 수 있다.
( Inputstream 을 생성하고, 하는 과거의 처리를 하지 않을 수 있다 )
MultipartRequest 를 사용한 복수 파일 업로드에 대해서 더 공부 해야 한다.
파일 업로드만 할 때에는 비동기 파일 업로드를 사용해야 한다. ( 더 공부하자..)
'생활코딩 > Spring' 카테고리의 다른 글
스프링 - 파일 다운로드 (0) | 2014.03.04 |
---|---|
스프링 배우기 - Bean Factory (0) | 2014.03.03 |
스프링 배우기 - pom.xml , JDBC Template (1) (0) | 2014.03.03 |
스프링 배우기 - JDBC Template (2) (0) | 2014.03.03 |
스프링 배우기 - JSON 처리 (1) | 2014.03.03 |
- Total
- Today
- Yesterday
- AOP
- 쿼리 로그
- Spring Boot
- static resources
- 정적 파일
- @Access
- 브라우저 콘솔
- 오프라인 확인
- 자바스크립트
- Spring
- RollingFileAppender
- mybatipse
- bootstrap
- 초대장
- offline.js
- AngularJS
- GO1104 LED
- summernote
- learning javascript
- 스프링 부트
- @Temporal
- WYSIWYG
- Excel
- log4jdbc
- java
- telegram bot
- spring jpa
- jsonify
- 한성키보드
- jQuery 삽입
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |