fileSelect.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<!doctype html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>단일 파일 업로드</title>
</head>
<body>
<form action="fileUpload.jsp" name="fileForm" method="post" enctype="multipart/form-data">
작성자: <input type="text" name="user"><br>
제목: <input type="text" name="title"><br>
파일명: <input type="file" name="uploadFile"><br>
<input type="submit" value="파일 업로드">
</form>
</body>
</html>
먼저 파일 업로드는 form태그에 <input type="file">을 통해서 하게 됩니다. 하지만 별다른 처리를 하지 않으면 실제로 넘어오는건 업로드한 파일이름만 넘어오고, 파일자체는 넘어오지 않습니다. 먼저 파일업로드를 받기 위해서는 enctype="multipart/form-data" 속성을 추가해줘야 됩니다.
이제 cors.jar을 이용해서 업로드를 받아야되는데요
Servlets.com | com.oreilly.servlet
www.servlets.com
아래 파일을 다운받아서 라이브러리에 추가해줍니다.
이제 파일을 업로드 받아 저장하고, 받은 파라미터 정보를 출력하는 파일을 만들어보겠습니다.
fileUpload.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page import="com.oreilly.servlet.MultipartRequest" %>
<%@ page import="com.oreilly.servlet.multipart.DefaultFileRenamePolicy" %>
<%@ page import="java.util.*" %>
<%@ page import="java.io.*" %>
<%
String realFolder = "";
String saveFolder = "fileSave"; // out폴더에 fileSave 폴더 생성
String encType = "utf-8";
int maxSize = 5*1024*1024; // 최대 업로드 5mb
ServletContext context = request.getServletContext();
realFolder = context.getRealPath(saveFolder);
out.println("the realpath is: " + realFolder + "<br>");
try {
MultipartRequest multi = null;
multi = new MultipartRequest(request, realFolder, maxSize, encType, new DefaultFileRenamePolicy());
Enumeration params = multi.getParameterNames();
while(params.hasMoreElements()) {
String name = (String) params.nextElement();
String value = multi.getParameter(name);
out.println(name + " = " + value + "<br>");
}
out.println("-------------------<br>");
Enumeration files = multi.getFileNames();
while(files.hasMoreElements()) {
String name = (String)files.nextElement();
String filename = multi.getFilesystemName(name);
String original = multi.getOriginalFileName(name);
String type = multi.getContentType(name);
File file = multi.getFile(name);
out.println("파라미터 이름" + name + "<br>");
out.println("실제 파일 이름" + original + "<br>");
out.println("저장된 파일 이름" + filename + "<br>");
out.println("파일 타입 이름" + type + "<br>");
if(file!= null) {
out.println("크기: " + file.length() + "<br>");
}
}
}catch (IOException ioe) {
System.out.println(ioe);
} catch (Exception ex) {
System.out.println(ex);
}
%>
- MultiRequest (javax.servlet.http.HttpServletRequst request,
java.lang.String saveDirectory,
int maxPostSize,
java.lang.String encoding,
FileRenamePolicy policy) - Enumteration getParameterNames() : 전송된 파라미터들의 이름을 Enumeration 타입으로 리턴
- String getParameter(String name) : 해당하는 이름의 파라미터 값을 리턴
- String getFilesystemName(String name) : 실제 파일이 업로드된 위치
- String getOriginalFileName(String name) : 사용자가 폼에서 직접 지정한 파일명 리턴
- String getContentType(String name) : 업로드 된 파일의 타입
- File getFile(name) :업로드된 파일 객체를 얻어낼 때 사용
위 메소드들을 사용하여 받은 파라미터와 파일 이름, 경로 등을 받아올 수 있습니다.
실행전에 fileSave 폴더를 생성해주어야 정상적으로 작동 됩니다.
multiple하게 파일 업로드 하기
Apache Commons – Apache Commons
Welcome to Apache Commons Apache Commons is an Apache project focused on all aspects of reusable Java components. The Apache Commons project is composed of three parts: The Commons Proper - A repository of reusable Java components. The Commons Sandbox - A
commons.apache.org
위 사이트에서
'commons-fileupload bin.zip', 'commons-io bin.zip' 파일을 다운로드
multiple.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%
request.setCharacterEncoding("utf-8");
int filecounter = 0;
if(request.getParameter("addcnt")!= null) {
filecounter = Integer.parseInt(request.getParameter("addcnt"));
}
%>
<html>
<head>
<title>여러개 파일을 업로드</title>
</head>
<body>
<h2>여러개의 파일을 업로드하는 예제</h2>
<form method="post" action="multipleAction.jsp" enctype="multipart/form-data">
<table border="1px">
<tr>
<td>작성자</td>
<td><input type="text" name="user"></td>
</tr>
<tr>
<td>제목</td>
<td><input type="text" name="title"></td>
</tr>
<tr>
<td>내용</td>
<td><input type="text" name="content"></td>
</tr>
<tr>
<td>파일업로드</td>
<td><input type="file" name="files" multiple></td>
</tr>
<tr>
<td><input type="submit" value="업로드"></td>
</tr>
</table>
</form>
</body>
</html>
multipleAction.jsp
<%@page contentType="text/html;charset=utf-8" %>
<%@page import="java.util.*" %>
<%@page import="org.apache.commons.fileupload.FileItem" %>
<%@ page import="org.apache.commons.fileupload.servlet.ServletFileUpload" %>
<%@ page import="org.apache.commons.fileupload.disk.DiskFileItemFactory" %>
<%@ page import="java.io.File" %>
<%@ page import="org.apache.commons.fileupload.FileUploadException" %>
<%
request.setCharacterEncoding("utf-8");
String realPath = "";
String savePath = "fileSave";
String type = "utf-8";
int maxSize = 10*1024*1024; // 10mb
ServletContext context = request.getServletContext();
realPath = context.getRealPath(savePath);
ArrayList saveFiles = new ArrayList();
ArrayList origFiles = new ArrayList();
try {
DiskFileItemFactory diskFileItemFactory = new DiskFileItemFactory();
diskFileItemFactory.setRepository(new File(realPath));
diskFileItemFactory.setSizeThreshold(maxSize);
diskFileItemFactory.setDefaultCharset("utf-8");
ServletFileUpload fileUpload = new ServletFileUpload(diskFileItemFactory);
List<FileItem> items = fileUpload.parseRequest(request);
for (FileItem item : items) {
if (item.isFormField()) {
out.print(String.format("[파일형식이 아닌 파라미터] 파라미터명: %s, 파일 명: %s, 파일크기: %s bytes <br>", item.getFieldName(), item.getString(), item.getSize()));
} else {
out.print(String.format("[파일형식 파라미터] 파라미터명: %s, 파일 명: %s, 파일 크기: %s bytes <br>", item.getFieldName(), item.getName(), item.getSize()));
if (item.getSize() > 0) {
String separator = File.separator;
int index = item.getName().lastIndexOf(separator);
String fileName = item.getName().substring(index + 1);
File uploadFile = new File(realPath + separator + fileName);
item.write(uploadFile);
}
}
}
} catch (FileUploadException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
%>
multiple 속성을 사용하여 여러개의 파일을 업로드 하고싶다면 이렇게 하면 잘 작동하는걸 볼 수 있다.
'JAVA' 카테고리의 다른 글
인텔리제이 콘솔 및 한글 메소드 깨짐 해결 (0) | 2021.07.01 |
---|---|
Jsp 주기적으로 특정 메소드 호출하기 (0) | 2021.05.22 |
intellij jsp & servlet & jstl 완벽 세팅하기 (0) | 2021.04.21 |
intellij tomcat서버 강제종료시 "tomcat 1099 is already in use" 에러 해결법 (0) | 2021.04.21 |
이클립스eclipse 한글화 패치하기 (2) | 2017.05.28 |