gwooden_코린이

서블릿 파일 업로드 기능 구현 해보기 본문

JSP&Servlet

서블릿 파일 업로드 기능 구현 해보기

gwooden22 2023. 2. 6. 12:41
728x90

http://www.servlets.com/cos/

다운로드 받은 cos.jar을 프로젝트 라이브러리에 넣어서 사용!

 


<form method="post" action="" enctype="mutilpart/form-data">
		
	</form>

파일 업로드를 할때는 파일 이름만 보내는게 아닌 파일 자체를 보내야 되기 때문에 enctype="mutilpart/form-data" <-- 해당 코드를 삽입해서 사용해야 파일 자체를 보낼 수 있다.

 

<%@ 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 method="post" action="" enctype="mutilpart/form-data">
		이름 : <input type="text" name="name"><br>
		제목 : <input type="text" name="title"><br>
		<input type="file" name="upload"><br>
		<input type="submit" value="업로드">
	</form>
</body>
</html>


	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
			MultipartRequest multi = new MultipartRequest(
					
					request,
					saveDirectory, //저장 위치
					maxPostSize, //파일 크기
					encoding, //인코딩(utf-8)
					policy //파일명 중복 처리
					
					);
		
	}

생성자 종류

  • request,
  • saveDirectory, //저장 위치
  • maxPostSize, //파일 크기
  • encoding, //인코딩(utf-8)
  • policy //파일명 중복 처리
package com.test.upload;

import java.io.IOException;

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;


@WebServlet("/upload.do")
public class UploadServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

    public UploadServlet() {
        super();
        // TODO Auto-generated constructor stub
    }


	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
	
	}


	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
			request.setCharacterEncoding("utf-8");
			
			String savePath = "upload"; //저장할 폴더명
			int uploadFileSize = 5 * 1024 * 1024; //업로드 파일 최대 크기 (5MB)
			String encType = "tuf-8";
			
			ServletContext context = getServletContext();
			String uploadFilePath = context.getRealPath(savePath); //서버에 저장되는 실제 경로
			System.out.println(uploadFilePath); //확인 용도
	}

}


파일을 여러개 업로드 할 경우

<%@ 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 method="post" action="upload2.do" enctype="multipart/form-data">
		
		1. 파일 <input type="file" name="file01"><br>
		2. 파일 <input type="file" name="file02"><br>
		3. 파일 <input type="file" name="file03"><br>
		
		<input type="submit" value="업로드">
	
	</form>
</body>
</html>
package com.test.upload;

import java.io.IOException;
import java.sql.Savepoint;
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 MultiUpload extends HttpServlet {
	private static final long serialVersionUID = 1L;


	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		request.setCharacterEncoding("utf-8");
		
		String savaDirectory = request.getServletContext().getRealPath("upload");
		
		int fileSize = 5 * 1024 * 1024;
		
		try {
			MultipartRequest multi = new MultipartRequest(
					
						request,
						savaDirectory,
						fileSize,
						"utf-8",
						new DefaultFileRenamePolicy()
					
					);
			Enumeration files = multi.getFileNames(); //업로드한 파일명들을 리턴 시켜준다. (여러 파일들)
			while(files.hasMoreElements()) {
				String file = (String)files.nextElement();
				String fileName = multi.getFilesystemName(file); //파일명 (중복되면 변경됨)
				String oriFlieName = multi.getOriginalFileName(file); //원본파일명
				
				System.out.println(fileName);
				System.out.println();
				} 
			
			}catch (Exception e) {
				e.printStackTrace();
		}
		
	}

}

728x90
Comments