※ MultiPart upload 시 파일객체 및 파라메터 취득방법
<dependencies>
<!-- https://mvnrepository.com/artifact/commons-fileupload/commons-fileupload -->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.4</version>
</dependency>
<!-- https://mvnrepository.com/artifact/commons-io/commons-io -->
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.8.0</version>
</dependency>
</dependencies>
<listener>
<listener-class>
org.apache.commons.fileupload.servlet.FileCleanerCleanup
</listener-class>
</listener>
import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Iterator;
import java.util.List;
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 org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
/**
* @author emunhi
*
*/
@WebServlet("/fileupload")
public class FileUpload extends HttpServlet {
private static final long serialVersionUID = 1L;
@SuppressWarnings("rawtypes")
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
/*
* 요청응답 설정 (여기서는 HTML형식 반환)
*/
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html; charset=UTF-8");
PrintWriter out = response.getWriter();
out.println("<style>table{border:1px solid black;border-collapse:collapse;}th,td{border:1px solid black;}</style>");
out.println("<HTML><HEAD><TITLE>업로드테스트(MultiPart)</TITLE></HEAD><BODY>");
// (1) 파일업로드 요청인지 확인한다.
if (ServletFileUpload.isMultipartContent(request)) {
try {
// 디스크상의 파일관리할 위치 설정
String uploadPath = "D:/logs/xxx";// this.getServletContext().getRealPath("/");
/*
* (2) 설정주의 -
* 관련해서는 아래 사이트를 참조할 것
* http://commons.apache.org/proper/commons-fileupload/using.html
*/
// Create a factory for disk-based file items
DiskFileItemFactory diskFactory = new DiskFileItemFactory();
// DiskFileItemFactory factory = new DiskFileItemFactory(yourMaxMemorySize, yourTempDirectory); // 한번에 구성시
// Configure a repository (to ensure a secure temp location is used)
diskFactory.setSizeThreshold(1024 * 1024 * 1024); // Your Max Memory Size
diskFactory.setRepository(new File(uploadPath + "/temp"));
// Create a new file upload handler
ServletFileUpload upload = new ServletFileUpload(diskFactory);
// Set overall request size constraint :: 파라메터 (long)를 안넣으면 0
upload.setSizeMax((long) 1024 * 1024 * 1024 * 1024 * 2); // 2TB : Your Max Request Size
// Parse the request
List<FileItem> items = upload.parseRequest(request);
// Process the uploaded items
Iterator iter = items.iterator();
while (iter.hasNext()) {
FileItem item = (FileItem) iter.next();
if (item.isFormField()) { // 파일 이외
processFormField(out, item);
} else { // 파일인 경우
processUploadFile(out, item, uploadPath);
}
}
} catch (Exception e) {
out.println("<PRE>");
e.printStackTrace(out);
out.println("</PRE>");
}
} else {
out.println("<H4 style='color:red;font-weight:bold'>MultiPart형식이 아님!!</H4>");
}
out.println("</BODY></HTML>");
}
// 업로드한 정보가 파일인경우 처리
private void processUploadFile(PrintWriter out, FileItem item, String uploadPath) throws Exception {
String name = item.getFieldName(); // 파라메터명(key)을 취득한다.
String fileName = item.getName(); // 파일명
String contentType = item.getContentType();// 컨텐츠타입
//boolean isInMemory = item.isInMemory();
long fileSize = item.getSize(); // 파일크기
// 저장할 파일명은 현재시각으로 변환해서 저장한다.
String fileExt = fileName.substring(fileName.lastIndexOf("."));
String uploadedFileName = System.currentTimeMillis() + fileExt;
// 저장할 파일객체를 생성한다.
File uploadedFile = new File(uploadPath + "/upload/" + uploadedFileName);
item.write(uploadedFile); // 파일 저장
// 결과를 화면에 보여줌
out.println("<table style='margin-bottom:10px;'>");
out.println("<tr><td style='width:150px;'>파라미터명</td><td style='width:450px;'>"+name+"</td></tr>");
out.println("<tr><td style='width:150px;'>파일명</td><td style='width:450px;'>"+fileName+"</td></tr>");
out.println("<tr><td style='width:150px;'>컨텐츠타입</td><td style='width:450px;'>"+contentType+"</td></tr>");
out.println("<tr><td style='width:150px;'>파일사이즈</td><td style='width:450px;'>"+fileSize+"</td></tr>");
out.println("<tr><td style='width:150px;'>업로드파일</td><td style='width:450px;'>"+uploadedFile.getPath()+"</td></tr>");
out.println("</table>");
}
private void processFormField(PrintWriter out, FileItem item) throws Exception {
String name = item.getFieldName(); // 파라메터명(key) 을 취득한다.
String value = item.getString("UTF-8"); // UTF-8형식으로 값을 읽는다.
// 결과를 화면에 보여줌
out.println("<table style='margin-bottom:10px;'>");
out.println("<tr><td style='width:150px;'>"+name+"</td><td style='width:250px;'>"+value+"</td></tr>");
out.println("</table>");
}
}
http://commons.apache.org/proper/commons-fileupload/using.html