Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- Request/Response Header
- 데이터베이스
- 카카오APi
- 세션
- java컴파일
- Java
- Servlet
- Multipart
- JavaScript
- 데이터포맷
- java annotation
- 반응형웹
- 데이터규정
- XML Core
- HTTP
- 공문서작성규정
- 데이터문서포맷
- Database
- xml
- XML DOM
- xml mapping
- 스프링프레임워크
- Session
- 자바스크립트
- 자바
- JSTL
- 웹프로그래밍
- JSP
- Ajax
- 프로그래밍용어
Archives
- Today
- Total
KyungHwan's etc.
스프링프레임워크 간단한 파일업로드 샘플 본문
1. 환경설정
pom.xml
<!-- common fileupload -->
<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>
spring-servlet.xml
<!-- 멀티파트 리졸버 -->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!-- 최대업로드 가능한 바이트크기 -->
<property name="maxUploadSize" value="52428800" />
<!-- 디스크에 임시 파일을 생성하기 전에 메모리에 보관할수있는 최대 바이트 크기 -->
<!-- property name="maxInMemorySize" value="52428800" / -->
<!-- defaultEncoding -->
<property name="defaultEncoding" value="utf-8" />
</bean>
2.컨트롤러 / 뷰 작성
WEB-INF/views/form.jsp
<body>
<h1>파일 업로드 예제</h1>
<form method="post" action="upload" enctype="multipart/form-data">
<label>email:</label>
<input type="text" name="email">
<br><br>
<label>파일:</label>
<input type="file" name="file1">
<br><br>
<input type="submit" value="upload">
</form>
</body>
파일 업로드를 할때에는 파일 업로드를 할 때는 form의 enctype = multipart/form-data로 작성해야하고, method = post여야 한다.(따로 포스팅을 해두었음.)
FileUploadController
public class FileUploadController {
FileUploadService fileUploadService;
"/form" ) (
public String form() {
return "form";
}
"/upload" ) (
public String upload(
Model model,
"email") String email, (
"file1") MultipartFile file) { (
String url = fileUploadService.restore(file);
model.addAttribute("url", url);
return "result";
}
}
FileUploadService
public class FileUploadService {
// 리눅스 기준으로 파일 경로를 작성 ( 루트 경로인 /으로 시작한다. )
// 윈도우라면 workspace의 드라이브를 파악하여 JVM이 알아서 처리해준다.
// 따라서 workspace가 C드라이브에 있다면 C드라이브에 upload 폴더를 생성해 놓아야 한다.
private static final String SAVE_PATH = "/upload"; //파일이 저장될 위치
private static final String PREFIX_URL = "/upload/"; //저장된 파일을 jsp에서 불러오기 위한 경로
public String restore(MultipartFile multipartFile) {
String url = null;
try {
// 파일 정보
String originFilename = multipartFile.getOriginalFilename();
String extName
= originFilename.substring(originFilename.lastIndexOf("."), originFilename.length());
Long size = multipartFile.getSize();
// 서버에서 저장 할 파일 이름
String saveFileName = genSaveFileName(extName);
System.out.println("originFilename : " + originFilename);
System.out.println("extensionName : " + extName);
System.out.println("size : " + size);
System.out.println("saveFileName : " + saveFileName);
writeFile(multipartFile, saveFileName);
url = PREFIX_URL + saveFileName; //View에서 이미지파일을 바로보기 위해산 경로
}
catch (IOException e) {
// 원래라면 RuntimeException 을 상속받은 예외가 처리되어야 하지만
// 편의상 RuntimeException을 던진다.
// throw new FileUploadException();
throw new RuntimeException(e);
}
return url;
}
// 현재 시간을 기준으로 파일 이름 생성 이름중복으로 덮어쓰기가 될 문제 때문에
private String genSaveFileName(String extName) {
String fileName = "";
Calendar calendar = Calendar.getInstance();
fileName += calendar.get(Calendar.YEAR);
fileName += calendar.get(Calendar.MONTH);
fileName += calendar.get(Calendar.DATE);
fileName += calendar.get(Calendar.HOUR);
fileName += calendar.get(Calendar.MINUTE);
fileName += calendar.get(Calendar.SECOND);
fileName += calendar.get(Calendar.MILLISECOND);
fileName += extName;
return fileName;
}
// 파일을 실제로 write 하는 메서드
private boolean writeFile(MultipartFile multipartFile, String saveFileName)
throws IOException{
boolean result = false;
byte[] data = multipartFile.getBytes();
FileOutputStream fos = new FileOutputStream(SAVE_PATH + "/" + saveFileName);
fos.write(data);
fos.close();
return result;
}
}
result.jsp(결과 페이지)
<h1>Upload completed</h1>
<div class="result-images">
<img src="${pageContext.request.contextPath }${url }" style="width:150px">
</div>
<p> <a href='/fileupload/form'> 다시 업로드 하기 </a> /p>
${ url }은 컨트롤러에서 넘겨준 파일이 저장된 경로명.
실제 파일이 저장된 서버 상의 위치( 물리 주소 )와, 애플리케이션에서 보여주고자 하는 파일 경로( 가상 주소 )가 일치 되지 않으면 엑박이 발생함.
따라서 실제 파일이 저장되어 있는 위치와 애플리케이션 상의 위치를 일치시키는 작업이 필요하다.
spring-servlet.xml
<!-- resource mapping -->
<!-- location : 물리적 주소 / mapping : 가상 주소 -->
<mvc:resources location="file:/upload/" mapping="/upload/*"/>
Reference
'Java > 스프링프레임워크' 카테고리의 다른 글
스프링프레임워크 - 뷰(View) 에서 JSTL태그를 이용하여 컨트롤러(Controller)에서 넘긴 모델(Model) 값 받기 (0) | 2018.06.22 |
---|---|
MyBatis 파라미터를 Map형식으로 받기 (0) | 2018.06.21 |
AJAX를 이용한 비동기 파일업로드(View에서 컨트롤러로 데이터전송) (0) | 2018.06.21 |
스프링프레임워크 - MVC Redirect 시 URI 에 붙는 파라미터 제거 하기 (0) | 2018.06.21 |
스프링프레임워크 - ModelAndView (0) | 2018.06.21 |
Comments