※ 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