SlideShare a Scribd company logo
스프링프레임워크 & 마이바티스
(Spring Framework, MyBatis)
6-17. Spring WEB MVC를 이용한 멀티파일 업로드, @ModelAttribute
STS에서
File  New  Spring Legacy Project
Project Name : fileupload
Spring MVC Project 선택
다음 화면의 top level package에서 a.b.fileupload 입력
[pom.xml]
파일업로드를 위한 의존성 추가
<!-- Apache Commons FileUpload -->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.1</version>
</dependency>
<!-- Apache Commons IO -->
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.4</version>
</dependency>
[src/main/webapp/WEB-INF/spring/appServlet/servlet-context.xml에 추가]
<beans:bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!-- setting maximum upload size 5M-->
<beans:property name="maxUploadSize" value="5000000" />
</beans:bean>
[모델 클래스 FileForm.java]
fileupload.jsp에서 넘기는 폼 데이터를 @ModelAttribute로 받기 위한 객체
package a.b.fileupload;
import java.util.List;
import org.springframework.web.multipart.MultipartFile;
public class FileForm {
private List<MultipartFile> files;
private String upDir;
public List<MultipartFile> getFiles() {
return files;
}
public String getUpDir() {
return upDir;
}
public void setUpDir(String upDir) {
this.upDir = upDir;
}
public void setFiles(List<MultipartFile> files) {
this.files = files;
}
}
3. 컨트롤러 작성[OnjController.java]
package a.b.fileupload;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.multipart.MultipartFile;
@Controller
public class HomeController {
@RequestMapping(value = "/", method = RequestMethod.GET)
public String displayForm() {
return "fileupload";
}
@RequestMapping(value = "/save", method = RequestMethod.POST)
public String save(@ModelAttribute("uploadForm") FileForm uploadForm,
Model map) throws Exception {
List<MultipartFile> files = uploadForm.getFiles();
// success.jsp 로 보낼 파일 이름 저장
List<String> fileNames = new ArrayList<String>();
if (null != files && files.size() > 0) {
for (MultipartFile multipartFile : files) {
String fileName = multipartFile.getOriginalFilename();
String path = uploadForm.getUpDir() + fileName;
File f = new File(path);
multipartFile.transferTo(f);
fileNames.add(fileName);
}
}
map.addAttribute("files", fileNames);
return "success";
}
}
[ /src/main/webapp/WEB-INF/views/fileupload.jsp]
<%@taglib uri="http://www.springframework.org/tags/form" prefix="form" %>
<html>
<head>
<title>spring mvc fileupload</title>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
<script>
<!-- jquery로 파일 첨부 추가 -->
$(document).ready(function() {
//add more file components if Add is clicked
$('#addFile').click(function() {
var fileIndex = $('#fileview tr').children().length;
$('#fileview').append(
'<tr><td>'+
' <input type="file" name="files['+ fileIndex +']" />'+
'</td></tr>');
});
});
</script>
</head>
<body>
<h3>Spring WEB MVC MuliFile Upload</h3>
<form:form method="post" action="save.html"
modelAttribute="uploadForm" enctype="multipart/form-data">
<!-- 아래 경로는 적젃히 수정하자. 이 경로에 파일이 업로드 된다. -->
Upload Directory : <input type="text" name="upDir"
value="c:/java/project/upload/"/><br><br>
<input id="addFile" type="button" value="File Add" />
<table id="fileview">
<tr>
<td><input name="files[0]" type="file" /></td>
</tr>
</table>
<br/><input type="submit" value="Upload" />
</form:form>
</body>
</html>
[/src/main/webapp/WEB-INF/views/success.jsp
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<html>
<head>
<title>Spring MVC Multiple File Upload</title>
</head>
<body>
<p>upload ok!!</p>
<ol>
<!-- 아래 files는 컨트롤러에서 직접 넘겨준 모델명 -->
<c:forEach var="file" items="${files}">
<li>${file}</li>
</c:forEach>
<!-- 컨트롤러에서 @ModelAttribute로 선언된 객체는 자동으로 view로 젂달 -->
<br><br>Uload Path : ${uploadForm.upDir}
</ol>
</body>
</html>
[실행]
http://localhost:8080/fileupload
실행하면 파일은 c:javaprojectupload 폴더에 생성된다.

More Related Content

PDF
#11.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원학원,재직자/실업자교육학원,스프링교육,마이바...
PDF
#31.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...
PDF
#34.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자교육,국...
PDF
#29.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...
PDF
(국비지원학원/재직자교육/실업자교육/IT실무교육_탑크리에듀)#4.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)
PDF
Filling the flask
PPTX
Flask – Python
PDF
Kyiv.py #17 Flask talk
#11.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원학원,재직자/실업자교육학원,스프링교육,마이바...
#31.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...
#34.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자교육,국...
#29.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...
(국비지원학원/재직자교육/실업자교육/IT실무교육_탑크리에듀)#4.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)
Filling the flask
Flask – Python
Kyiv.py #17 Flask talk

What's hot (20)

PDF
Flask Basics
PPTX
Spring Framework Petclinic sample application
PPTX
How to use soap component
KEY
CodeIgniter 3.0
PDF
JavaDo#09 Spring boot入門ハンズオン
PDF
[Spring Camp 2013] Java Configuration 없인 못살아!
PPTX
Spring data jpa simple example_스프링학원/자바학원추천/구로IT학원/자바학원
PDF
Flask RESTful Flask HTTPAuth
PDF
Getting Started-with-Laravel
PDF
Java Server Faces
PDF
Rest API using Flask & SqlAlchemy
PDF
Datagrids with Symfony 2, Backbone and Backgrid
PDF
REST API with CakePHP
PPTX
Spring Boot
PDF
What happens in laravel 4 bootstraping
PDF
React, Redux and es6/7
PPTX
Resthub framework presentation
PDF
Spring boot入門ハンズオン第二回
PDF
Bootstrat REST APIs with Laravel 5
Flask Basics
Spring Framework Petclinic sample application
How to use soap component
CodeIgniter 3.0
JavaDo#09 Spring boot入門ハンズオン
[Spring Camp 2013] Java Configuration 없인 못살아!
Spring data jpa simple example_스프링학원/자바학원추천/구로IT학원/자바학원
Flask RESTful Flask HTTPAuth
Getting Started-with-Laravel
Java Server Faces
Rest API using Flask & SqlAlchemy
Datagrids with Symfony 2, Backbone and Backgrid
REST API with CakePHP
Spring Boot
What happens in laravel 4 bootstraping
React, Redux and es6/7
Resthub framework presentation
Spring boot入門ハンズオン第二回
Bootstrat REST APIs with Laravel 5
Ad

Viewers also liked (19)

PDF
#36.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_재직자환급교육,실업자교육,국비지원교육, 자바교육,구...
PDF
#33.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...
PDF
#32.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...
PDF
#21.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...
PDF
#19.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...
PDF
#27.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...
PDF
#22.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...
PDF
#16.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...
PDF
#20.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...
PDF
(IT실무교육/국비지원교육/자바/스프링교육추천)#15.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)
PDF
(국비지원/실업자교육/재직자교육/스프링교육/마이바티스교육추천)#13.스프링프레임워크 & 마이바티스 (Spring Framework, MyB...
PDF
#18.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...
PDF
#17.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...
PDF
(스프링교육/마이바티스교육학원추천_탑크리에듀)#10.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)
PDF
[#9.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)]_재직자환급교육/실업자환급교육/구로IT학원/스프링교...
PDF
(#8.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis))스프링/자바교육/IT교육/스프링프레임워크교육/국비지...
PDF
[자바학원/스프링교육학원/마이바티스학원추천/구로IT학원_탑크리에듀]#7.스프링프레임워크 & 마이바티스 (Spring Framework, M...
PDF
(Spring Data JPA)식별자(@Id, Primary Key) 자동 생성, @GeneratedValue의 strategy 속성,Ge...
PDF
#12.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_구로IT학원, 국비지원학원,재직자/실업자교육학원,스...
#36.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_재직자환급교육,실업자교육,국비지원교육, 자바교육,구...
#33.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...
#32.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...
#21.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...
#19.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...
#27.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...
#22.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원...
#16.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...
#20.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...
(IT실무교육/국비지원교육/자바/스프링교육추천)#15.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)
(국비지원/실업자교육/재직자교육/스프링교육/마이바티스교육추천)#13.스프링프레임워크 & 마이바티스 (Spring Framework, MyB...
#18.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...
#17.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_국비지원IT학원/실업자/재직자환급교육/자바/스프링/...
(스프링교육/마이바티스교육학원추천_탑크리에듀)#10.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)
[#9.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)]_재직자환급교육/실업자환급교육/구로IT학원/스프링교...
(#8.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis))스프링/자바교육/IT교육/스프링프레임워크교육/국비지...
[자바학원/스프링교육학원/마이바티스학원추천/구로IT학원_탑크리에듀]#7.스프링프레임워크 & 마이바티스 (Spring Framework, M...
(Spring Data JPA)식별자(@Id, Primary Key) 자동 생성, @GeneratedValue의 strategy 속성,Ge...
#12.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_구로IT학원, 국비지원학원,재직자/실업자교육학원,스...
Ad

Similar to #30.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원교육, 국비지원교육, 구로IT교육학원, IT실무교육, 오라클자바커뮤니티 (20)

PDF
Drag and drop file upload with Dropzone in CodeIgniter
PPTX
Soap Component
PDF
How to connect redis and mule esb using spring data redis module
KEY
Integrating Wicket with Java EE 6
PPTX
Deep dive into new ASP.NET MVC 4 Features
PDF
Djangoアプリのデプロイに関するプラクティス / Deploy django application
PPTX
Cliw - extension development
PDF
Codeigniter : Two Step View - Concept Implementation
PDF
Android Studio Assignment HelpCan someone who is familiar with And.pdf
PPTX
Google app engine by example
PPTX
PHP fundamnetal in information technology CHapter -02.pptx
PDF
Restap ito uploadfilessharepoint
ODP
Exploring Symfony's Code
PPT
Asp.net
PPTX
WordPress Structure and Best Practices
ODP
CodeIgniter PHP MVC Framework
PDF
Denys Serhiienko "ASGI in depth"
PDF
[Laptrinh.vn] lap trinh Spring Framework 3
PPTX
Local SQLite Database with Node for beginners
Drag and drop file upload with Dropzone in CodeIgniter
Soap Component
How to connect redis and mule esb using spring data redis module
Integrating Wicket with Java EE 6
Deep dive into new ASP.NET MVC 4 Features
Djangoアプリのデプロイに関するプラクティス / Deploy django application
Cliw - extension development
Codeigniter : Two Step View - Concept Implementation
Android Studio Assignment HelpCan someone who is familiar with And.pdf
Google app engine by example
PHP fundamnetal in information technology CHapter -02.pptx
Restap ito uploadfilessharepoint
Exploring Symfony's Code
Asp.net
WordPress Structure and Best Practices
CodeIgniter PHP MVC Framework
Denys Serhiienko "ASGI in depth"
[Laptrinh.vn] lap trinh Spring Framework 3
Local SQLite Database with Node for beginners

More from 탑크리에듀(구로디지털단지역3번출구 2분거리) (20)

PDF
자마린.안드로이드 기본 내장레이아웃(Built-In List Item Layouts)
PDF
(스프링프레임워크 강좌)스프링부트개요 및 HelloWorld 따라하기
PDF
자마린 iOS 멀티화면 컨트롤러_네비게이션 컨트롤러, 루트 뷰 컨트롤러
PPTX
[IT교육/IT학원]Develope를 위한 IT실무교육
PPTX
[아이오닉학원]아이오닉 하이브리드 앱 개발 과정(아이오닉2로 동적 모바일 앱 만들기)
PPTX
[뷰제이에스학원]뷰제이에스(Vue.js) 프로그래밍 입문(프로그레시브 자바스크립트 프레임워크)
PPTX
[씨샵학원/씨샵교육]C#, 윈폼, 네트워크, ado.net 실무프로젝트 과정
PPTX
[정보처리기사자격증학원]정보처리기사 취득 양성과정(국비무료 자격증과정)
PPTX
[wpf학원,wpf교육]닷넷, c#기반 wpf 프로그래밍 인터페이스구현 재직자 향상과정
PDF
(WPF교육)ListBox와 Linq 쿼리를 이용한 간단한 데이터바인딩, 새창 띄우기, 이벤트 및 델리게이트를 통한 메인윈도우의 ListB...
PDF
[자마린교육/자마린실습]자바,스프링프레임워크(스프링부트) RESTful 웹서비스 구현 실습,자마린에서 스프링 웹서비스를 호출하고 응답 JS...
PPTX
[구로자마린학원/자마린강좌/자마린교육]3. xamarin.ios 3.3.5 추가적인 사항
PPTX
3. xamarin.i os 3.3 xamarin.ios helloworld 자세히 살펴보기 3.4.4 view controllers an...
PPTX
5. 서브 쿼리(sub query) 5.1 서브 쿼리(sub query) 개요 5.2 단일행 서브쿼리(single row sub query)
PPTX
3. xamarin.i os 3.1 xamarin.ios 설치, 개발환경 3.2 xamarin.ios helloworld(단일 뷰) 실습[...
PDF
(닷넷,자마린,아이폰실습)Xamarin.iOS HelloWorld 실습_멀티화면,화면전환_Xamarin교육/Xamarin강좌
PPTX
C#기초에서 윈도우, 스마트폰 앱개발 과정(c#.net, ado.net, win form, wpf, 자마린)_자마린학원_씨샵교육_WPF학원...
PPTX
자바, 웹 기초와 스프링 프레임워크 & 마이바티스 재직자 향상과정(자바학원/자바교육/자바기업출강]
PPTX
3. xamarin.i os 3.1 xamarin.ios 설치, 개발환경 3.2 xamarin.ios helloworld_자마린학원_자마린...
PPTX
3. 안드로이드 애플리케이션 구성요소 3.2인텐트 part01(안드로이드학원/안드로이드교육/안드로이드강좌/안드로이드기업출강]
자마린.안드로이드 기본 내장레이아웃(Built-In List Item Layouts)
(스프링프레임워크 강좌)스프링부트개요 및 HelloWorld 따라하기
자마린 iOS 멀티화면 컨트롤러_네비게이션 컨트롤러, 루트 뷰 컨트롤러
[IT교육/IT학원]Develope를 위한 IT실무교육
[아이오닉학원]아이오닉 하이브리드 앱 개발 과정(아이오닉2로 동적 모바일 앱 만들기)
[뷰제이에스학원]뷰제이에스(Vue.js) 프로그래밍 입문(프로그레시브 자바스크립트 프레임워크)
[씨샵학원/씨샵교육]C#, 윈폼, 네트워크, ado.net 실무프로젝트 과정
[정보처리기사자격증학원]정보처리기사 취득 양성과정(국비무료 자격증과정)
[wpf학원,wpf교육]닷넷, c#기반 wpf 프로그래밍 인터페이스구현 재직자 향상과정
(WPF교육)ListBox와 Linq 쿼리를 이용한 간단한 데이터바인딩, 새창 띄우기, 이벤트 및 델리게이트를 통한 메인윈도우의 ListB...
[자마린교육/자마린실습]자바,스프링프레임워크(스프링부트) RESTful 웹서비스 구현 실습,자마린에서 스프링 웹서비스를 호출하고 응답 JS...
[구로자마린학원/자마린강좌/자마린교육]3. xamarin.ios 3.3.5 추가적인 사항
3. xamarin.i os 3.3 xamarin.ios helloworld 자세히 살펴보기 3.4.4 view controllers an...
5. 서브 쿼리(sub query) 5.1 서브 쿼리(sub query) 개요 5.2 단일행 서브쿼리(single row sub query)
3. xamarin.i os 3.1 xamarin.ios 설치, 개발환경 3.2 xamarin.ios helloworld(단일 뷰) 실습[...
(닷넷,자마린,아이폰실습)Xamarin.iOS HelloWorld 실습_멀티화면,화면전환_Xamarin교육/Xamarin강좌
C#기초에서 윈도우, 스마트폰 앱개발 과정(c#.net, ado.net, win form, wpf, 자마린)_자마린학원_씨샵교육_WPF학원...
자바, 웹 기초와 스프링 프레임워크 & 마이바티스 재직자 향상과정(자바학원/자바교육/자바기업출강]
3. xamarin.i os 3.1 xamarin.ios 설치, 개발환경 3.2 xamarin.ios helloworld_자마린학원_자마린...
3. 안드로이드 애플리케이션 구성요소 3.2인텐트 part01(안드로이드학원/안드로이드교육/안드로이드강좌/안드로이드기업출강]

Recently uploaded (20)

PPTX
Microbial diseases, their pathogenesis and prophylaxis
PDF
O5-L3 Freight Transport Ops (International) V1.pdf
PPTX
PPT- ENG7_QUARTER1_LESSON1_WEEK1. IMAGERY -DESCRIPTIONS pptx.pptx
PPTX
IMMUNITY IMMUNITY refers to protection against infection, and the immune syst...
PDF
FourierSeries-QuestionsWithAnswers(Part-A).pdf
PPTX
BOWEL ELIMINATION FACTORS AFFECTING AND TYPES
PPTX
master seminar digital applications in india
PPTX
Institutional Correction lecture only . . .
PPTX
Cell Structure & Organelles in detailed.
PDF
01-Introduction-to-Information-Management.pdf
PDF
Insiders guide to clinical Medicine.pdf
PPTX
PPH.pptx obstetrics and gynecology in nursing
PDF
O7-L3 Supply Chain Operations - ICLT Program
PDF
Sports Quiz easy sports quiz sports quiz
PDF
Chapter 2 Heredity, Prenatal Development, and Birth.pdf
PPTX
Final Presentation General Medicine 03-08-2024.pptx
PDF
Saundersa Comprehensive Review for the NCLEX-RN Examination.pdf
PDF
Abdominal Access Techniques with Prof. Dr. R K Mishra
PPTX
Lesson notes of climatology university.
PDF
Basic Mud Logging Guide for educational purpose
Microbial diseases, their pathogenesis and prophylaxis
O5-L3 Freight Transport Ops (International) V1.pdf
PPT- ENG7_QUARTER1_LESSON1_WEEK1. IMAGERY -DESCRIPTIONS pptx.pptx
IMMUNITY IMMUNITY refers to protection against infection, and the immune syst...
FourierSeries-QuestionsWithAnswers(Part-A).pdf
BOWEL ELIMINATION FACTORS AFFECTING AND TYPES
master seminar digital applications in india
Institutional Correction lecture only . . .
Cell Structure & Organelles in detailed.
01-Introduction-to-Information-Management.pdf
Insiders guide to clinical Medicine.pdf
PPH.pptx obstetrics and gynecology in nursing
O7-L3 Supply Chain Operations - ICLT Program
Sports Quiz easy sports quiz sports quiz
Chapter 2 Heredity, Prenatal Development, and Birth.pdf
Final Presentation General Medicine 03-08-2024.pptx
Saundersa Comprehensive Review for the NCLEX-RN Examination.pdf
Abdominal Access Techniques with Prof. Dr. R K Mishra
Lesson notes of climatology university.
Basic Mud Logging Guide for educational purpose

#30.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)_스프링프레임워크 강좌, 재직자환급교육,실업자국비지원교육, 국비지원교육, 구로IT교육학원, IT실무교육, 오라클자바커뮤니티

  • 1. 스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis) 6-17. Spring WEB MVC를 이용한 멀티파일 업로드, @ModelAttribute STS에서 File  New  Spring Legacy Project Project Name : fileupload Spring MVC Project 선택 다음 화면의 top level package에서 a.b.fileupload 입력 [pom.xml] 파일업로드를 위한 의존성 추가 <!-- Apache Commons FileUpload --> <dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.3.1</version> </dependency> <!-- Apache Commons IO --> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.4</version> </dependency> [src/main/webapp/WEB-INF/spring/appServlet/servlet-context.xml에 추가] <beans:bean id="multipartResolver"
  • 2. class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <!-- setting maximum upload size 5M--> <beans:property name="maxUploadSize" value="5000000" /> </beans:bean> [모델 클래스 FileForm.java] fileupload.jsp에서 넘기는 폼 데이터를 @ModelAttribute로 받기 위한 객체 package a.b.fileupload; import java.util.List; import org.springframework.web.multipart.MultipartFile; public class FileForm { private List<MultipartFile> files; private String upDir; public List<MultipartFile> getFiles() { return files; } public String getUpDir() { return upDir; } public void setUpDir(String upDir) { this.upDir = upDir; } public void setFiles(List<MultipartFile> files) { this.files = files; } }
  • 3. 3. 컨트롤러 작성[OnjController.java] package a.b.fileupload; import java.io.File; import java.util.ArrayList; import java.util.List; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.multipart.MultipartFile; @Controller public class HomeController { @RequestMapping(value = "/", method = RequestMethod.GET) public String displayForm() { return "fileupload"; } @RequestMapping(value = "/save", method = RequestMethod.POST) public String save(@ModelAttribute("uploadForm") FileForm uploadForm, Model map) throws Exception { List<MultipartFile> files = uploadForm.getFiles(); // success.jsp 로 보낼 파일 이름 저장 List<String> fileNames = new ArrayList<String>(); if (null != files && files.size() > 0) { for (MultipartFile multipartFile : files) { String fileName = multipartFile.getOriginalFilename(); String path = uploadForm.getUpDir() + fileName;
  • 4. File f = new File(path); multipartFile.transferTo(f); fileNames.add(fileName); } } map.addAttribute("files", fileNames); return "success"; } } [ /src/main/webapp/WEB-INF/views/fileupload.jsp] <%@taglib uri="http://www.springframework.org/tags/form" prefix="form" %> <html> <head> <title>spring mvc fileupload</title> <script src="//ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script> <script> <!-- jquery로 파일 첨부 추가 --> $(document).ready(function() { //add more file components if Add is clicked $('#addFile').click(function() { var fileIndex = $('#fileview tr').children().length; $('#fileview').append( '<tr><td>'+ ' <input type="file" name="files['+ fileIndex +']" />'+ '</td></tr>'); }); }); </script> </head> <body> <h3>Spring WEB MVC MuliFile Upload</h3> <form:form method="post" action="save.html"
  • 5. modelAttribute="uploadForm" enctype="multipart/form-data"> <!-- 아래 경로는 적젃히 수정하자. 이 경로에 파일이 업로드 된다. --> Upload Directory : <input type="text" name="upDir" value="c:/java/project/upload/"/><br><br> <input id="addFile" type="button" value="File Add" /> <table id="fileview"> <tr> <td><input name="files[0]" type="file" /></td> </tr> </table> <br/><input type="submit" value="Upload" /> </form:form> </body> </html> [/src/main/webapp/WEB-INF/views/success.jsp <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> <html> <head> <title>Spring MVC Multiple File Upload</title> </head> <body> <p>upload ok!!</p> <ol> <!-- 아래 files는 컨트롤러에서 직접 넘겨준 모델명 --> <c:forEach var="file" items="${files}"> <li>${file}</li> </c:forEach> <!-- 컨트롤러에서 @ModelAttribute로 선언된 객체는 자동으로 view로 젂달 --> <br><br>Uload Path : ${uploadForm.upDir} </ol> </body> </html> [실행]