file upload
fileForm.jsp
<form action = "fileFormOk.jsp" method="post" enctype="multipart/form-data">
파일 : <input type="file" name="file"><br/>
<input type="submit" value="File Upload">
</form>
- <input type="file"> : 파일을 선택할 수 있는 창을 만든다.
- <form method="post"> : 형태로 전송한 폼에 담겨진 파라미터들은
request 객체를 통해 이름에 해당되는 값을 얻어낼 수 있다 . - 하지만 enctype="multipart/form-data"로 지정한 폼은
request객체로 파라미터의 값을 얻어낼 수 없다.
multipart/form-data 전송한 양식의 파라미터들에 대한 값을 얻어내기 위해
특별한 컴포넌트가 필요하다!
http://www.servlets.com/cos/
여기서 cos 파일을 다운 받아 cos/lib/cos.jar 파일을 WebContent/WEB-INF/lib에 복사한다.
fileFormOk.jsp
실질적인 업로드가 진행되는 jsp 파일
<%@page import="java.util.Enumeration"%>
<%@page import="com.oreilly.servlet.MultipartRequest"%>
<%@page import="com.oreilly.servlet.multipart.DefaultFileRenamePolicy"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
String path = request.getRealPath("fileFolder"); //파일이 실제로 저장되는 폴더명
int size = 1024 * 1024 * 10; //10M
String file="";
String oriFile = "";
try{
//MultipartRequest객체가 파일 업로드를 담당
//form에서 가져온 인자값을 얻기위해
//업로드될 위치
//업로드 최대크기 설정 초과할경우 exception
//한글
//이름이 같은 파일을 업로드할경우 파일이름 변환
MultipartRequest multi = new MultipartRequest(request, path, size, "utf-8", new DefaultFileRenamePolicy());
Enumeration files = multi.getFileNames(); //올린파일이름들을 얻는다.
String str = (String)files.nextElement();//파일이름 저장
file = multi.getFilesystemName(str); //파일이름이 중복되어있을때 처리
oriFile = multi.getOriginalFileName(str);
}catch(Exception e){
e.printStackTrace();
}
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
file upload success;
</body>
</html>