파일업로드 예제 p.312 ~ p.321
1. 파일업로드 예제 구조
2. 소스 코드 및 설명
fileUploadForm.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>FileUpload Form</title>
</head>
<style>
#uploadFormArea{
margin: auto;
width: 350px;
border: 1px solid black;
}
.td_title{
font-size: xx-large;
text-align: center;
}
</style>
<body>
<section id="uploadFormArea">
<form action="fileUpload.jsp" method="post" enctype="multipart/form-data">
<table>
<tr>
<td colspan="2" class="td_title">파일 업로드 폼</td>
</tr>
<tr>
<td><label for="name">올린 사람 : </label></td>
<td><input type="text" name="name" id="name"></td>
</tr>
<tr>
<td><label for="subject">제목 : </label></td>
<td><input type="text" name="subject" id="subject"></td>
</tr>
<tr>
<td><label for="filename1">파일명 : </label></td>
<td><input type="file" name="filename1" id="filename1"></td>
</tr>
<tr>
<td><label for="filename2">파일명 : </label></td>
<td><input type="file" name="filename2" id="filename2"></td>
</tr>
<tr>
<td colspan="2" align="center"><input type="submit" value="전송"></td>
</tr>
</table>
</form>
</section>
</body>
</html>
실행 결과
- post 방식으로 fileUpLoad.jsp에 입력된 데이터 값들을 전송한다.
- 파일을 업로드하기 위해서 enctype 속성을 multipar/form-date( 파일이나 이미지를 서버로 전송할 때 주로 사용)로 설정하고 파일을 선택하여 전송할 수 있도록 <input type> 속성을 file로 설정
- <form enctype="속성값">
- enctype 속성을 폼 데이터가 서버로 제출될때 해당 데이터가 인코딩되는 방식을 명시
- method 속성값이 'post'인 경우에만 사용 가능하다
fileUpload.jsp
- fileUpload.jsp를 실행하기 위해서 webapp 아래에 upload라는 디렉터리를 생성해주어야 한다.
<%@ page import="com.oreilly.servlet.MultipartRequest" %>
<%@ page import="com.oreilly.servlet.multipart.DefaultFileRenamePolicy" %>
<%@ page import="java.util.Enumeration" %>
<%@ page import="jdk.nashorn.internal.runtime.ECMAException" %><%--
Created by IntelliJ IDEA.
User: baek
Date: 2021-08-23
Time: 오후 5:31
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%
String uploadPath=request.getRealPath("/upload");
int size = 10*1024*1024;
String name="";
String subject="";
String filename1="";
String filename2="";
String origfilename1="";
String origfilename2="";
try{
MultipartRequest multi = new MultipartRequest(request,
uploadPath,
size,
"UTF-8",
new DefaultFileRenamePolicy());
name=multi.getParameter("name");
subject=multi.getParameter("subject");
Enumeration files= multi.getParameterNames();
String file1 = (String)files.nextElement();
filename1=multi.getFilesystemName(file1);
origfilename1=multi.getOriginalFileName(file1);
String file2 = (String)files.nextElement();
filename1=multi.getFilesystemName(file2);
origfilename1=multi.getOriginalFileName(file2);
}
catch (Exception e){
e.printStackTrace();
}
%>
<html>
<body>
<form name="filecheck" action="fileCheck.jsp" method="post">
<input type="hidden" name="name" value="<%=name%>">
<input type="hidden" name="subject" value="<%=subject%>">
<input type="hidden" name="filename1" value="<%=filename1%>">
<input type="hidden" name="filename2" value="<%=filename2%>">
<input type="hidden" name="origfilename1" value="<%=origfilename1%>">
<input type="hidden" name="origfilename2" value="<%=origfilename2%>">
</form>
<a href="#" onclick="javascript:filecheck.submit()">업로드 확인 및 다운로드 페이지 이동</a>
</body>
</html>
실행결과
- cos.jar 라이브러리를 사용하여 요청받은 데이터를 분석하여 파일 정보(파일이름, 사용자 입력 문자열 데이터)를 보여준다.
- 업로드할 서버상의 폴더명을 지정함 (/upload 폴더)
- 한번의 요청으로 업로드할수 있는 파일의 최대크기를 10메가로 지정하고 용량을 넘을 경우 Exception이 발생
- post 방식으로 fileCheck.jsp로 데이터를 전송한다
- target 폴더 아래에서 업로드한 파일을 확인 할수 있다
fileCheck.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%
request.setCharacterEncoding("UTF-8");
String name = request.getParameter("name");
String subject = request.getParameter("subject");
String filename1 = request.getParameter("filename1");
String filename2 = request.getParameter("filename2");
String origfilename1 = request.getParameter("origfilename1");
String origfilename2 = request.getParameter("origfilename2");
%>
<html>
<head>
<title>파일 업로드 확인 및 다운로드</title>
</head>
<body>
올린 사람 : <%=name %><br>
제목 : <%=subject %><br>
파일명1 : <a href="file_down.jsp?file_name=<%=filename1 %>">
<%=origfilename1 %></a><br>
파일명2 : <a href="file_down.jsp?file_name=<%=filename2 %>">
<%=origfilename2 %></a><p>
</body>
</html>
file_down.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page import="java.net.URLEncoder" %>
<%@ page import="java.io.File" %>
<%@ page import="java.io.*" %>
<%
String fileName = request.getParameter("file_name");
String savePath = "upload";
ServletContext context = config.getServletContext();
String sDownloadPath = context.getRealPath(savePath);
String sFilePath = sDownloadPath + "\\"+fileName;
byte b[] = new byte[4096];
FileInputStream in = new FileInputStream(sFilePath);
String sMimeType = config.getServletContext().getMimeType(sFilePath);
System.out.println("sMimeType>>>"+ sMimeType);
if (sMimeType == null)
sMimeType = "application/octet-stream";
// Microsoft Internet 대응 코드드
response.setContentType(sMimeType);
String agent = request.getHeader("User-Agent");
boolean ieBrowser = (agent.contains("MSIE")) || (agent.contains("Trident"));
if(ieBrowser){
fileName = URLEncoder.encode(fileName,"UTF-8").replaceAll("\\+", "%20");
}else{
fileName = new String(fileName.getBytes("UTF-8"), "iso-8859-1");
}
response.setHeader("Content-Disposition","attachment; filename = " + fileName);
ServletOutputStream out2 = response.getOutputStream();
int numRead;
while ((numRead = in.read(b, 0, b.length)) != -1){
out2.write(b, 0, numRead);
}
out2.flush();
out2.close();
in.close();
%>
실행결과(fileCheck.jsp,file_down.jsp)
'JSP' 카테고리의 다른 글
2021-08-26(게시판 프로젝트 구조) (0) | 2021.08.26 |
---|---|
2021-08-25(JSP-JSTL) (0) | 2021.08.25 |
2021-08-24-(JSP-파일업로드2) (0) | 2021.08.25 |
2021-08-17(JSP개념) (0) | 2021.08.17 |
2021-08-12(JSP 개발환경 설정, 톰캣연결) (0) | 2021.08.12 |