1. 파일 업로드 준비하기
파일 업로드를 위해서는 다음과 같은 조건이 필요하다.
파일 업로드를 위해 필요한 form 태그의 속성
1. method가 post 일 것
2. enctype이 multipart/form-data 일 것
3. form 태그 안에 파일을 업로드할 수 있는 태그가 있는가 (기본은 input 태그의 file 타입)
* commons-fileupload 파일 다운로드
https://mvnrepository.com 에서 commons-fileupload 검색
Apache Commons FileUpload 다운로드 (예제의 경우 1.3.3을 사용)
commons-io를 검색
Apache Commons IO 다운로드 (예제의 경우 2.6을 사용)
2. Form 페이지 작성
JSP 파일을 생성하여 다음과 같이 페이지를 작성한다.
<form action="fileupload_process.jsp" method="post"
enctype="multipart/form-data">
<p>파일 : <input type="file" name="filename"/></p>
<p><input type="submit" value="파일 올리기"/></p>
</form>

3. process 페이지 작성
폼에서 받아온 데이터를 처리하여 파일을 저장하는 JSP페이지를 작성한다.
request.setCharacterEncoding("UTF-8");
String fileUploadPath = "D:/upload";
DiskFileUpload upload = new DiskFileUpload();
// request의 파라미터를 분석해 List 객체로 반환한다.
List items = upload.parseRequest(request);
// List 객체를 반복자(Iterator) 타입으로 반환한다.
Iterator params = items.iterator();
while(params.hasNext()){
FileItem f = (FileItem) params.next();
// 만약 가져온 데이터가 일반 폼 데이터가 아닐 경우(즉, 파일일 경우)
if(!f.isFormField()){
String fileName = f.getName();
fileName = fileName.substring(fileName.lastIndexOf("\\") + 1);
File file = new File(fileUploadPath + File.separator + fileName);
f.write(file);
}
}
DiskFileUpload 클래스
- 업로드된 파일의 저장소와 관련된 클래스
* DiskFileUpload
| List<FileItem> parseRequest(HttpServletRequest request) | - request 객체에서 요청 파라미터를 List<FileItem> 객체로 반환 |
| void setRepositoryPath(String path) | - 파일을 저장하는 경로를 지정 |
| void setSizeMax(long sizeMax) | - 파일 최대 크기를 지정 (byte 단위) - 최대 크기를 초과할 경우 SizeLimitExceededException 발생 |
| void setSizeThreshold(long sizeThreshold) | - 저장 경로에 임시파일을 생성할 한계 크기를 지정 (byte 단위) - 한계 크기를 초과할 경우 메모리에 있던 파일의 바이너리 데이터를 저장소에 임시파일(.tmp)로 저장 - 대용량의 데이터가 JVM 메모리에 로드되는 부담을 줄이기 위함 |
FileItem 인터페이스
- Form 태그에서 가져온 Input 태그의 데이터 그 자체를 표현할 수 있다.
* FileItem의 메서드
| boolean isFormField() | - 일반 폼 데이터인지 여부를 반환 - 일반 데이터일 경우 true - 파일일 경우 false |
| String getFieldName() | - 요청 파라미터 key를 문자열로 반환 |
| String getString() | - 요청 파라미터 value를 문자열로 반환 |
| String getString(String encode) | - 요청 파라미터 value를 인코딩하여 문자열로 반환 |
| String getName() | - 파일의 이름 반환 |
| long getSize() | - 파일의 크기 반환 |
| byte[] get() | - 파일을 바이트 배열로 반환 |
| boolean isInMemory() | - 메모리에 저장되면 true - 임시 디렉터리에 저장되면 false |
| void delete() | - 파일 삭제 |
| void write(File file) | - 파일을 경로에 저장 |
| String getContentType() | - 파일의 콘텐츠 타입을 문자열로 반환 |
'JSP' 카테고리의 다른 글
| fmt를 이용한 여러 방법의 다국어 처리 (0) | 2023.01.11 |
|---|---|
| JSTL Fmt를 이용한 다국어 처리 (0) | 2023.01.11 |
| EL 표현식으로 세션, 쿠키 값 가져오기 (0) | 2022.12.31 |
| 내장 객체 (Implicit Object) (0) | 2022.12.28 |
| getRemoteAddr()의 반환값을 IPv4로 변경 (0) | 2022.12.28 |