본문 바로가기

개발중/JavaServer Pages (JSP)

여러장 파일 업로드

728x90
반응형

파일을 업로드 할 때 하나만 업로드 하는 경우는 드물다.

페이스북이던 sns에 사진을 여러개 올리는 사람들이 대부분이다.

오늘은 여러개를 업로드 하는  방법을 알아봐야지

 

이거 완전 경사 아니겠노 ! 

 

[ 02_upload.jap ]

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>[ 02_upload.jsp ]</title>
</head>
<body>
	<form action="upload2.do" method="post" enctype="multipart/form-data">
		1. 파일 지정하기 : <input type="file" name="uploadFile01">
		2. 파일 지정하기 : <input type="file" name="uploadFile02">
		3. 파일 지정하기 : <input type="file" name="uploadFile03">
		<input type="submit" value="전송">
	</form>
</body>
</html>

 

[ upload2.do ]

package com.saeyan.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;

/**
 * Servlet implementation class MultiUploadServlet
 */
@WebServlet("/upload2.do")
public class MultiUploadServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public MultiUploadServlet() {
        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;
		String encType = "UTF-8";
		
		ServletContext context = getServletContext();
		String uploadFilePath = context.getRealPath(savePath);
		out.print(uploadFilePath);
		
		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);
                    
					String img =  uploadFilePath + "\\" + ori_file_name;
					out.print("img>>"+ img);
					out.print("	<img src=\"" + img +"\" width=200 height=200 >");
                    
					out.print("<hr>");
				}
		}catch (Exception e) {
			System.out.println("예외 발생 : " + e );
		}
	}
}

 

 

  • 파일을 받아올 때도 Enumeration file 처럼 Enumeration 타입으로 받아온다.

 

  • 여러개 업로드 할 때는 단일이랑 다르게 while문을 사용한다.  while문은 file.hasMoreElements() 로 다음 파일이 존재하는지 여부를 묻는다

 

  • new DefaultFileRenamePolicy() 를 이용해서중복된 파일이 업로드 될 경우 이름을 바꿔서 저장하도록 설정 해놨으므로 현재 업로드 된 파일명은 매번 다르다

나는 이미지를 함께 출력해보고 싶어서 

img = uploadFilePath + \ + ori_file_name 을 문자열로 생성하고 이미지 태그로 출력하는 방법을 사용했다

<img src="" + img + "" width=200 height=200>

 

 

내가 만들고 싶은 프로젝트에 대해 조금씩 가까워지는 기분이라 행복하다 끼야오!

 

 

 

728x90
반응형

'개발중 > JavaServer Pages (JSP)' 카테고리의 다른 글

단일 파일 업로드  (0) 2020.08.15
session Login  (0) 2020.08.15
파일 다운로드/ 선택  (0) 2020.08.14
화폐단위 표현  (0) 2020.08.14
Login  (0) 2020.08.14