multipart/form-data 방식 사용인코딩 방식
| 인코딩 방식 | 설명 |
|---|---|
application/x-www-form-urlencoded |
기본 폼 데이터 전송 방식 (문자열 인코딩) |
multipart/form-data |
파일 업로드 시 사용하는 인코딩 (모든 문자를 인코딩하지 않음) |
text/plain |
공백문자만 + 기호로 인코딩 |
1.fileUpload.jsp)<%@ page contentType="text/html;charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>파일 업로드</title>
</head>
<body>
<h3>파일 업로드 실습</h3>
<form action="./proc/fileUpload.jsp" method="post" enctype="multipart/form-data">
<input type="text" name="uid" placeholder="아이디 입력"><br>
<input type="text" name="name" placeholder="이름 입력"><br>
<input type="file" name="file"><br>
<input type="submit" value="파일전송">
</form>
</body>
</html>
proc/fileUpload.jsp)1. 파일 저장 경로 설정
getRealPath("/uploads"): 서버에서 uploads 폴더의 실제 경로를 가져옴new File(uploadPath): 해당 경로에 대한 File 객체를 생성if (!uploadDir.exists()) { uploadDir.mkdir(); }: 경로에 디렉토리가 없으면 새로 생성String uploadPath = application.getRealPath("/uploads");
File uploadDir = new File(uploadPath);
if (!uploadDir.exists()) {
uploadDir.mkdir();
}
2. 파일 업로드 객체 생성 및 설정
DiskFileItemFactory: 파일 업로드를 위한 객체 생성 팩토리JakartaServletFileUpload: 파일 업로드 처리를 위한 클래스setSizeMax(1024 * 1024 * 10): 최대 파일 크기를 10MB로 설정DiskFileItemFactory factory = DiskFileItemFactory.builder().get();
JakartaServletFileUpload<DiskFileItem, DiskFileItemFactory> upload = new JakartaServletFileUpload<>(factory);
upload.setSizeMax(1024 * 1024 * 10); // 최대 10MB 설정
3. 파일 업로드 요청 파싱