728x90
반응형
1. 폼을 통해 파일을 전송하기 위해서는 method가 반드시 post 방식이어야한다. get 방식은 주소 창을 타고 넘어가기 때문에 255자 이하의 작은 용량만 전송가능하기 때문이다. 따라서 파일 같이 용량이 큰 경우에는 get 방식으로 전송이 불가능하기 때문에 post 방식을 사용해야 한다.
2. form태그에 enctype="multpart/form-data"를 추가해주어야 한다.
MultipartRequest 클래스 생성자
MultipartRequest (
javax.servlet.http.HttpServletRequest request,
java.lang.String saveDirectory,
int maxPostSize,
java.lang.String encoding,
FileRenamePolicy policy
)
EX01. uploadFile
upload.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h2>파일 업로드</h2>
<form action="upload.do" method="post" enctype="multipart/form-data">
글쓴이 : <input type="text" name="name"> <br>
제 목 : <input type="text" name="title"> <br>
파일지정 : <input type="file" name="uploadFile"> <br>
<input type="submit" value="전송">
</form>
</body>
</html>
UploadServlet.java
package com.lbi;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.oreilly.servlet.MultipartRequest;
import com.oreilly.servlet.multipart.DefaultFileRenamePolicy;
/**
* Servlet implementation class UploadServlet
*/
@WebServlet("/upload.do")
public class UploadServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public UploadServlet() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
response.getWriter().append("Served at: ").append(request.getContextPath());
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//브라우저에 따라 값을 넘기는 방식이 다르기 때문에 인코딩을 따로 지정
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html; charset=UTF-8");
PrintWriter out = response.getWriter();
//다운로드 받을 경로 지정
String savePath = "upload";
//최대 업로드 파일 크기 지정
int uploadFileSizeLimit = 5*1024*1024; //5MByte
String encType = "UTF-8";
ServletContext context = getServletContext();
String uploadFilePath = context.getRealPath(savePath);
System.out.println("서버상의 실제 디렉토리 : " + uploadFilePath);
try {
MultipartRequest multi = new MultipartRequest (
request,
uploadFilePath,
uploadFileSizeLimit,
encType,
new DefaultFileRenamePolicy()
);
//업로드 된 파일의 이름 얻기
String fileName = multi.getFilesystemName("uploadFile");
if(fileName == null) {
System.out.println("파일이 업로드 되지 않았습니다.");
}else {
out.println("<br>글쓴이 : " + multi.getParameter("name"));
out.println("<br>제목 : " + multi.getParameter("title"));
out.println("<br>파일명 : " + fileName);
}
} catch (Exception e) {
System.out.println("예외발생 : " + e);
}
}
}
EX02. 다중 uploadFile
multiUpload.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h2>다중 파일 업로드 하기</h2>
<form action="upload2.do" method="post" enctype="multipart/form-data">
1. 파일 지정하기 : <input type="file" name="uploadFile01"> <br>
2. 파일 지정하기 : <input type="file" name="uploadFile02"> <br>
3. 파일 지정하기 : <input type="file" name="uploadFile03"> <br>
<input type="submit" value="전송">
</form>
</body>
</html>
MultiFileServlet.java
package com.lbi;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Enumeration;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.oreilly.servlet.MultipartRequest;
import com.oreilly.servlet.multipart.DefaultFileRenamePolicy;
/**
* Servlet implementation class MultiFileServlet
*/
@WebServlet("/upload2.do")
public class MultiFileServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public MultiFileServlet() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
response.getWriter().append("Served at: ").append(request.getContextPath());
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setContentType("text/html; charset=UTF-8");
PrintWriter out = response.getWriter();
String savePath = "upload";
int maxSize = 5*1024*1024;
String encType="UTF-8";
ServletContext context = getServletContext();
String uploadFilePath = context.getRealPath(savePath);
try {
MultipartRequest multi = new MultipartRequest(request, uploadFilePath, maxSize, encType, new DefaultFileRenamePolicy());
Enumeration files = multi.getFileNames();
while(files.hasMoreElements()) {
String file = (String)files.nextElement();
String file_name = multi.getFilesystemName(file);
//중복된 파일이 업로드 된 경우 파일명을 바꿈
String ori_file_name = multi.getOriginalFileName(file);
out.println("<br>업로드 된 파일명 : " + file_name);
out.println("<br>원본 파일명 : " + file_name);
out.println("<hr>");
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
728x90
반응형
'Spring > JSP' 카테고리의 다른 글
[JSP] JSTL <c:forEach> (0) | 2022.11.24 |
---|---|
[JSP] JSTL <c:if> (0) | 2022.11.24 |
[JSP] JSTL - Core (0) | 2022.11.24 |
[JSP] JSTL 설치 (0) | 2022.11.24 |
[JSP] 로그인 예제 (0) | 2022.11.23 |
댓글