일반적으로 아래와 같은 코드를 통해 파일 업로드를 할 수 있다.
<%@ page contentType="text/html; charset=utf-8" %>
<%@ page import="org.apache.commons.fileupload.*" %>
<%@ page import="java.io.*" %>
<%@ page import="java.util.*" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>File Upload</title>
</head>
<body>
<%
String path = " ... 경로 입력 ... ";
DiskFileUpload upload = new DiskFileUpload(); ...(1)
List list = upload.parseRequest(request); ...(2)
Iterator data = list.iterator(); ...(3)
while(data.hasNext()){
FileItem fileitem = (FileItem)data.next(); ...(4)
if(!fileitem.isFormField()){ ...(5)
String filename = fileitem.getName(); ...(6)
filename = filename.substring(filename.lastIndexOf("\\" + 1); ...(7)
File file = new File(path + "/" + filename); ...(8)
item.write(file);
}
}
%>
</body>
</html>
(1, 2) DiskFileUpload 객체를 만들고, 요청받은 파라미터들을 리스트(List list)에 넣는다.
(3) iterator() 메소드를 통해 리스트에 있는 모든 데이터를 가져와 Iterator 객체의 data 변수에 넣는다.
(4, 5) data의 내용을 FileItem 객체의 fileitem에 넣고, isFormField 메서드를 통해 파일인지 확인한다. (조건에 !(not)를 붙여주는 것을 잊지 말자.)
** FileItem 객체로 데이터를 옮기는 이유는 common-fileupload 클래스의 메소드들을 사용하기 위해서이다.
** isFormField는 요청 파라미터가 파일일 경우 false를 리턴하고, 일반 데이터일 경우에는 true를 리턴한다.
(6, 7) filename에서 substring 메소드를 사용하여 파일명만 추출해낸다. 이때 substring(filename.lastIndexOf("\\" + 1); 을 해주는 이유는 substring 코드 없이 진행될 경우 아래와 같은 코드를 출력해보면 다음과 같다.
out.println("파일 이름(getName) : " + filename);
out.println("파일 경로(getPath) : " + file.getPath());
getName을 하게 되면 파일명이 따로 추출되는 것이 아니라, 시스템 내에 있는 "경로+파일명"을 가져오기 때문에 substring(filename.lastIndexOf("\\"+1); 을 하여 끝쪽 \\(파일 경로)까지 자르고 +1된 문자열 부터 가져오도록 하는 것이다.
그리고 (8) 우리가 설정해둔 사전 경로 path에다가 /를 붙여 서버에다가 저장시킬 수 있다.
.
.
.
(파일 저장 코드)
<%@ page contentType="text/html; charset=utf-8" %>
<%@ page import="org.apache.commons.fileupload.*" %>
<%@ page import="java.io.*" %>
<%@ page import="java.util.*" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>File Upload</title>
</head>
<body>
<%
DiskFileUpload upload = new DiskFileUpload();
List list = upload.parseRequest(request);
Iterator data = list.iterator();
while(data.hasNext()){
FileItem fileitem = (FileItem)data.next();
if(!fileitem.isFormField()){
String filename = fileitem.getName();
filename = filename.substring(filename.lastIndexOf("\\")+1);
File file = new File("C:\\Users\\지형\\eclipse-workspace\\JSPBook\\WebContent\\ch07\\upload\\" + filename);
fileitem.write(file);
}
}
%>
</body>
</html>
'Backend > JSP' 카테고리의 다른 글
[JSP] 유효성 검사 (0) | 2020.11.02 |
---|---|
[JSP] 파일업로드 (0) | 2020.10.19 |
[JSP] MultipartRequest 이유 모르는 에러 해결 (0) | 2020.10.17 |
[JSP] 액션 태그 (0) | 2020.09.29 |
[JSP] 디렉티브 태그 (0) | 2020.09.28 |
댓글