JSP/이론
파일업로드//enctype
SEOKIHOUSE
2023. 6. 19. 16:53
준비물


- enctype
<form> 태그의 enctype 속성은 폼 데이터(form data)가 서버로 제출될 때 해당 데이터가 인코딩되는 방법을 명시
이 속성은 <form> 요소의 method 속성값이 “post”인 경우에만 사용가능!!
http://www.tcpschool.com/html-tag-attrs/form-enctype <<참고
application/x-www-form-urlencoded | 기본값으로, 모든 문자들은 서버로 보내기 전에 인코딩됨을 명시 | |
multipart/form-data | 모든 문자를 인코딩하지 않음을 명시함. 이 방식은 <form> 요소가 파일이나 이미지를 서버로 전송할 때 주로 사용 |
|
text/plain | 공백 문자(space)는 "+" 기호로 변환하지만, 나머지 문자는 모두 인코딩되지 않음을 명시 |
- MultipartRequest 생성자의 인자:
- request: post 방식으로 전송된 데이터를 담고 있는 객체입니다.
- application.getRealPath("/files"): 업로드된 파일을 저장할 경로를 지정합니다. /files 경로는 웹 애플리케이션의 루트 경로에서의 상대 경로입니다.
- 100*1024*1024: 업로드 파일의 최대 허용 크기를 지정합니다. 이 경우에는 100MB로 설정되어 있습니다.
- "utf-8": 업로드된 파일의 인코딩을 지정합니다.
- new DefaultFileRenamePolicy(): 동일한 파일명이 이미 존재할 경우에 대한 처리 방법을 지정합니다. 기본 정책은 중복된 파일명에 번호를 붙여 구분합니다.
- getFile("upload"): 업로드된 파일의 정보를 얻기 위해 MultipartRequest 객체에서 upload라는 이름으로 전송된 파일을 얻습니다.


↑↑↑두개 동일하다고 한다 ㅇㅋ?ㅇㅋ↑↑↑
- 1)파일업로드하는거로 넘기는거면 multipartRequest 객체를 사용해서 파라미터값을 받아야한다


- 1-1)기존에 하던거처럼 받으면 null이뜬다..


<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>File Upload Form</title>
</head>
<body>
<h3>업로드할 파일을 선택하세요</h3>
<form action="01_fileupload.jsp" method="post" enctype="multipart/form-data">
<input type="file" name="upload"><br>
<input type="submit" value="파일업로드">
</form>
</body>
</html>
<%@page import="java.io.File"%>
<%@page import="com.oreilly.servlet.multipart.DefaultFileRenamePolicy"%>
<%@page import="com.oreilly.servlet.MultipartRequest"%>
<%@ 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>
<%
MultipartRequest m = new MultipartRequest(
request,//post방식으로 전송된 데이터를 담는 객체
application.getRealPath("/files"), //파일저장경로
100*1024*1024, //100MB
"utf-8",
new DefaultFileRenamePolicy() //동일 파일명 처리방법
);
File file = m.getFile("upload"); //파일객체 얻기
if(file == null) {
out.print("파일 업로듀 오류");
}else {
out.print("file name : " + file.getName() +"<br>");
out.print("file size: " + file.length() +"<br>");
}
%>
</body>
</html>
1)상품등록하는거로 연습해보gi

1)jsp로만해보기
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>File Upload Form</title>
</head>
<body>
<h3>업로드할 파일을 선택하세요</h3>
<form action="01_fileupload.jsp" method="post" enctype="multipart/form-data">
상품명 <input type="text" name="name"><br>
상품설명 <input type="text" name="content"><br>
<input type="file" name="upload"><br>
<input type="submit" value="파일업로드">
</form>
</body>
</html>
<%@page import="java.io.File"%>
<%@page import="com.oreilly.servlet.multipart.DefaultFileRenamePolicy"%>
<%@page import="com.oreilly.servlet.MultipartRequest"%>
<%@ 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>
<%
MultipartRequest m = new MultipartRequest(
request,//post방식으로 전송된 데이터를 담는 객체
application.getRealPath("/files"), //파일저장경로
100*1024*1024, //100MB
"utf-8",
new DefaultFileRenamePolicy() //동일 파일명 처리방법
);
//같이 보내는 경우 m으로 getparameter로 하자
String name = m.getParameter("name");
String content = m.getParameter("content");
File file = m.getFile("upload"); //파일객체 얻기
String filename ="";
if(file == null) {
out.print("파일 업로듀 오류");
}else {
out.print("file name : " + file.getName() +"<br>");
out.print("file size: " + file.length() +"<br>");
filename = file.getName();
}
%>
</body>
<div>
상품명: <%=name %><br>
상품설명: <%=content %><br>
<img alt="" src="files/<%=filename %>">
</div>
</html>
2)서블렛으로 하기
<%@ 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="fileuploadServlet" method="post" enctype="multipart/form-data">
상품명 <input type="text" name="name"><br>
상품설명 <input type="text" name="content"><br>
<input type="file" name="upload">
<input type="submit" value="파일업로드">
</form>
</body>
</html>
package servlet;
import java.io.File;
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;
import com.oreilly.servlet.MultipartRequest;
import com.oreilly.servlet.multipart.DefaultFileRenamePolicy;
@WebServlet("/fileuploadServlet")
public class fileuploadServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String saveDirectory = getServletContext().getRealPath("/files");
int maxFileSize = 100 * 1024 * 1024; // 100MB
String encoding = "UTF-8";
MultipartRequest m = new MultipartRequest(
request,
saveDirectory,
maxFileSize,
encoding,
new DefaultFileRenamePolicy()
);
File file = m.getFile("upload");
String name = m.getParameter("name");
String content = m.getParameter("content");
String filename ="";
if(file != null) {
filename = file.getName();
}
request.setAttribute("name", name);
request.setAttribute("content", content);
request.setAttribute("filename", filename);
request.getRequestDispatcher("01_sangpoomupload.jsp").forward(request, response);
}
}
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<div>
상품명: ${name }<br>
상품설명: ${content }<br>
<img alt="" src="files/${filename }">
</div>
</body>
</html>