<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html" charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="uploadFormAction" method="post" enctype="multipart/form-data">
<input type="file" name="uploadFile" multiple>
<button>Submit</button>
</form>
</body>
</html>
실제 전송될 경로인 action="uploadFormAction"로 지정해주고, enctype속성값을 "multipart/form-data"로 지정해주는게 중요합니다.
<input type="file">의 경우 최근 브라우저에서는 'multiple'로 지정해주면 여러 개의 파일을 업로드 할수 있다고 합니다.(브라우저 마다 지원 여부 달라짐)
package org.zerock.controller;
import java.io.File;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.multipart.MultipartFile;
import lombok.extern.log4j.Log4j;
@Controller
@Log4j
public class UploadController {
String uploadFolder = "/Users/sky/eclipse-workspace/ex05/upload/temp"; //저장 될 폴더경로
@PostMapping("/uploadFormAction")
public void uploadFormPost(MultipartFile[] uploadFile, Model model) {
for(MultipartFile multipartFile : uploadFile) {
log.info("----------------------------");
log.info("Upload File Name: " + multipartFile.getOriginalFilename());
log.info("Upload File Size: " + multipartFile.getSize());
File saveFile = new File(uploadFolder, multipartFile.getOriginalFilename());
try {
multipartFile.transferTo(saveFile);
}catch(Exception e) {
log.error(e.getMessage());
}
}
}
}
메서드 | 설명 |
---|---|
String getName() | 파라미터의 이름 <input> 태그의 이름 |
String getOriginalFilename() | 업로그되는 파일의 이름 |
boolean isEmpty() | 파일이 존재하지 않는 경우 true |
long getSize() | 업로드되는 파일의 크기 |
byte[] getBytes() | byte[]로 파일 데이터 반환 |
inputStream getInputStream() | 파일데이터와 연결된 inputStream을 반환 |
transferTo(File file) | 파일의 저장 |
파일 처리는 스프링에서 제공하는 MultipartFile이라는 타입을 이용하여 파일을 전송합니다.
파일저장은 위에 나온 TransferTo()를 사용하여 저장을 할수 있습니다.
파일을 넣고 전송버튼을 누릅니다.
uploadForm.jsp 화면을 구현하지 않았으므로 404에러 코드가 뜹니다.