반응형
form 태그로 파일을 업로드하는 방식은 페이지 이동과 동시에 이루어짐
Get 방식으로 폼에서 업로드할 파일을 받아, Post 방식으로 처리
첨부 파일 처리에 대한 설정은 web.xml에서 함(업로드에 대한 Tomcat 자체 설정)
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee https://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<servlet> 태그 내부에 <multipart-config> 태그를 추가
<servlet>
...
<multipart-config>
<!-- 파일이 업로드되면 저장될 경로 -->
<location>C:\\upload\\temp</location>
<!-- 업로드되는 파일의 최대 크기 -->
<max-file-size>20971520</max-file-size><!-- '1MB * 20'를 byte 단위로 작성 -->
<!-- 한번에 업로드할 수 있는 최대 크기 -->
<max-request-size>41946040</max-request-size><!-- '40MB'를 byte 단위로 작성 -->
<!-- 특정 사이즈의 메모리 사용 -->
<file-size-threshold>20971520</file-size-threshold><!-- '20MB'를 byte 단위로 작성 -->
</multipart-config>
</servlet>
파일 업로드 처리를 위한 Controller 작성 - GET 방식
@Controller
@Log4j
public class UploadController{
@GetMapping("/uploadForm")
public void uploadForm(){
log.info("form 접근");
}
}
/uploadForm으로 접속하면 form에 접근할 수 있도록 views 폴더 아래 uploadForm.jsp 작성
<body>
<form action="/uploadFormAction" method="post"
enctype="multipart/form-data"><!-- 파일을 전송받아야하기 때문에 추가 -->
<input type="file" name="uploadFile"
multiple /><!-- 하나의 input 태그로 여러개의 파일을 업로드할 수 있게 하는 속성 -->
<button>upload</button>
</form>
</body>
간단하게 <form> 태그 내부에 업로드할 파일을 받을 <input> 태그만 생성
2021.10.10 - [Spring] - [Spring] 파일 업로드를 위한 form 태그 내부에 작성하는 enctype="multipart/form-data"의 의미
[Spring] 파일 업로드를 위한 form 태그 내부에 작성하는 enctype="multipart/form-data"의 의미
태그에서 POST 요청 시 데이터 인코딩이 필요한데, html에서는 세가지의 인코딩 방법을 제공함 application/x-www-form-urlencoded(default 값) application/x-www-form-urlencoded은 모든 문자들을 서버로 전송하..
wheneveryouwantsz.tistory.com
Controller에 POST 방식 작성
@PostMapping("/uploadFormAction")
// 파일이 여러개 업로드 될 수 있기 때문에 배열로 uploadFile을 받음
public void uploadFormPost(MultipartFile[] uploadFile, Model model){
// web.xml에서 지정한 경로와 같은 경로를 작성해 파일이 업로드되면 해당 폴더에 저장_해당 폴더를 생성해야함
String uploadFolder = "C:\\upload_data\\temp";
// MultipartFile의 내부 메서드를 이용해 파일의 이름과 크기를 로그로 작성
log.info("파일 이름: " + multipartFile.getOriginalFilename());
log.info("파일 크기: " + multipartFile.getSize());
// 반복문을 통해 여러개의 uploadFile을 multipartFile에 저장
for(MultipartFile multipartFile : uploadFile){
// 저장된 파일의정보(저장되는 위치, 업로드되는 파일의 이름)
File saveFile = new File(uploadFolder, multipartFile.getOriginalFilename());
try{
// transferTo() 메서드로 파일을 저장, 파라미터로는 File 객체를 받음
multipartFile.transferTo(saveFile);
}catch(Exception e){
log.error(e.getMessage());
}
}
}
MultipartFile 인터페이스: multipart 요청으로 받아 업로드된 파일을 표현하는 것으로, 파일의 내용은 메모리에 저장됨
'Spring' 카테고리의 다른 글
[Spring] ajax를 이용해 파일 업로드 시 문제점 보완 (0) | 2021.10.13 |
---|---|
[Spring] ajax를 이용한 파일 업로드 (0) | 2021.10.12 |
[Spring] 파일 업로드를 위한 form 태그 내부에 작성하는 enctype="multipart/form-data"의 의미 (0) | 2021.10.10 |
[Spring] Spring Security 기본 세팅과 로그인, 로그아웃 로직 (0) | 2021.10.09 |
[Spring] Logging Levels, 로그 레벨 (0) | 2021.10.08 |