21.파일 업로드

2022. 8. 11. 10:47JAVA

2022.08.11.목


1.파일 업로드(file upload)

package com.controller;

import java.io.IOException;
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("/uploadUI")
public class UploadFormController extends HttpServlet 
{
	protected void doGet(HttpServletRequest request, HttpServletResponse response) 
			throws ServletException, IOException 
	{
		response.sendRedirect("uploadForm.jsp");
	}
	protected void doPost(HttpServletRequest request, HttpServletResponse response) 
			throws ServletException, IOException 
	{
		doGet(request, response);
	}

}
//uploadForm.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>
<h1>업로드화면</h1>
<!-- post 메서드로만 넘겨줄 수 있음. enctype은 "multipart/form-data"로 정해져있음 -->
<form action="upload" method="post" enctype="multipart/form-data">
설명:<input type="text" name="theText"><br>
파일:<input type="file" name="theFile"><br>
<input type="submit" value="업로드">
</form>
</body>
</html>
package com.controller;

import java.io.File;
import java.io.IOException;
import java.util.Iterator;
import java.util.List;

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 org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

@WebServlet("/upload")
public class UploadController extends HttpServlet 
{
	protected void doGet(HttpServletRequest request, HttpServletResponse response) 
			throws ServletException, IOException 
	{
		//파일 업로드 파리미터 처리는 이전 방식의 request.getParameter("key") 사용불가
		//기존 request 사용불가
		
		//메뉴얼에서 확인 후 복사해서 사용
		
		// Create a factory for disk-based file items
		DiskFileItemFactory factory = new DiskFileItemFactory();

		// Configure a repository (to ensure a secure temp location is used)
		ServletContext servletContext = this.getServletConfig().getServletContext();
		File repository = (File) servletContext.getAttribute("javax.servlet.context.tempdir");
		factory.setRepository(repository);

		// Create a new file upload handler
		ServletFileUpload upload = new ServletFileUpload(factory);

		String fileName = "";
		String contentType = "";
		long sizeInBytes = 0;
		
		// Parse the request
		try 
		{
			List<FileItem> items = upload.parseRequest(request);
			// Process the uploaded items
			
		    /*
		    [name=null, StoreLocation=null, size=0 bytes, isFormField=true, FieldName=theText, name=토토로.jpg, 
		    StoreLocation=C:\\web_study\\apache-tomcat-8.5.81\\work\\Catalina\\localhost
		    				\\app20\\upload_337de6c6_196d_46dc_8088_50f1f12e8726_00000001.tmp, 
		    size=665544 bytes, isFormField=false, FieldName=theFile]
		     */
			Iterator<FileItem> iter = items.iterator();
			while (iter.hasNext()) 
			{
				FileItem item = iter.next();
				//FileItem 2가지 타입 저장(1.바이너리(파일) 2.텍스트)
			    if (item.isFormField()) 
			    {
			        //type="text" 등... type="file"이 아닌 파라미터 처리
			    	String name = item.getFieldName();
			        String value = item.getString("utf-8");
			        System.out.println(name);
			        System.out.println(value);
			    } 
			    else 
			    {
			        //type="file" 파라미터 처리
			    	String fieldName = item.getFieldName(); //theFile
			        fileName = item.getName(); //파일명
			        contentType = item.getContentType(); //파일타입
			        boolean isInMemory = item.isInMemory(); 
			        sizeInBytes = item.getSize(); //파일크기
			        
			        System.out.println(fieldName);
			        System.out.println(fileName);
			        System.out.println(contentType);
			        System.out.println(isInMemory);
			        System.out.println(sizeInBytes);
			        
			        //c:\\upload 폴더에 저장
			        File saveFile = new File("c:\\upload", fileName);
			        try { item.write(saveFile); } 
			        catch (Exception e) { e.printStackTrace(); }
			    }
			}
		} 
		catch (FileUploadException e) 
		{
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		//jsp 위임
		request.setAttribute("fileName", fileName);
		request.setAttribute("contentType", contentType);
		request.setAttribute("sizeInBytes", sizeInBytes);
		
		request.getRequestDispatcher("info.jsp").forward(request, response);
	}
	protected void doPost(HttpServletRequest request, HttpServletResponse response) 
			throws ServletException, IOException 
	{
		doGet(request, response);
	}

}
//info.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>
<h1>업로드정보</h1>
파일명:${fileName}
파일타입:${contentType}
파일크기:${sizeInBytes}
</form>
</body>
</html>

'JAVA' 카테고리의 다른 글

23.Java JPA  (0) 2022.08.25
22.Java 객체지향 설계  (0) 2022.08.23
20.Web화면 재사용/EL/JSTL  (0) 2022.08.10
19.mybatis Web/필터/세션관리  (0) 2022.08.09
18.mybatis  (0) 2022.08.08