21.파일 업로드
2022. 8. 11. 10:47ㆍJAVA
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 |