JSP + Servlet | 여러 개의 파일을 한번에 업로드

파과·2022년 7월 21일
0

JSP + Servlet

목록 보기
25/33
  • form 태그 내에 <input type="file">을 여러 번 기술한다.
  • 각각의 name 속성 값은 다르게 한다.
  • getFileNames()메소드로 각 태그의 name값을 얻어온다. 이 메소드는 파일 목록을 Enumeration 형태로 반환한다.
  • Enumeration은 hasMoreElements()nextElement()를 사용해 데이터를 한 개씩 추출해 낼 수 있다.
  • 파일들이 중복될 경우 자동으로 숫자가 붙기 때문에, 원본 파일명을 얻으려면 getOriginalFileName()메소드를 사용한다.

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>
	<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>

MultiUploadServlet.java

여러 파일을 한번에 업로드하기 위한 서블릿

package com.sw.controller;

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;


@WebServlet("/upload2.do")
public class MultiUploadServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
   
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		request.setCharacterEncoding("UTF-8");
		response.setContentType("text/html; charset=UTF-8");
		PrintWriter out = response.getWriter();
		String savePath = "upload";
		int uploadFileSizeLimit = 5 * 1024 * 1024;
		String encType = "UTF-8";
		
		ServletContext context = getServletContext();
		String uploadFilePath = context.getRealPath(savePath);
		
		try {
			MultipartRequest multi = new MultipartRequest(
					request, 
					uploadFilePath,
					uploadFileSizeLimit,
					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.print("<br> 업로드된 파일명: " + file_name);
				out.print("<br> 원본 파일명: " + ori_file_name);
				out.print("<hr>");
			}
		}catch(Exception e) {
			System.out.println("예외 발생: " + e);
		}
	}

}

0개의 댓글